reducido código de ejemplo:plantillas variadic con el parámetro 'const' sobrecarga
#include <iostream>
template<typename T>
void func(T &x)
{
std::cout << "non-const " << x << std::endl;
}
template<typename T>
void func(const T &x)
{
std::cout << "const " << x << std::endl;
}
template<typename ...ARGS>
void proxy(ARGS ...args)
{
func(args...);
}
int main()
{
int i = 3;
func(i);
func(5);
func("blah");
proxy(i);
proxy(5);
proxy("blah");
}
Resultados previstos:
non-const 3
const 5
const blah
non-const 3
const 5
const blah
salida real:
non-const 3
const 5
const blah
non-const 3
non-const 5
non-const blah
Así que de alguna manera el const
calificador de la función parámetro se pierde cuando se pasa a través de la plantilla variadic. ¿Por qué? ¿Cómo puedo prevenir esto?
PD: probado con GCC 4.5.1 y SUSE 11,4
No tiene nada que ver con las plantillas variadic. Los parámetros del proxy de su plantilla de función no son referencias, por lo que la const de los argumentos de la función se ignora al deducir los argumentos de la plantilla. – Cosyn