tengo este código:Parámetros de plantilla predeterminados: ¿por qué el compilador se queja de no especificar el argumento de la plantilla?
struct A{};
template<class T = A>
struct B {
void foo() {}
};
B b; //Error: missing template arguments before 'b'
//Error: expected ';' before 'b'
//More errors
b.foo()
Si hago foo()
como una función de plantilla con la misma plantilla 'firma', el compilador no se queja de no especificar los argumentos de plantilla:
struct A {};
struct B {
template<class T = A>
void foo() {}
};
B b; //OK
b.foo()
Entonces, ¿por qué debo especificar un argumento para una clase de plantilla con un parámetro predeterminado, pero no para una función de plantilla? ¿Me falta algo de sutileza?
El motivo se debe a la falla en la deducción del argumento de la plantilla. Pero quiero saber por qué.
¿Falta una palabra en el título de esta pregunta? – Pointy
Sí. Perdió la palabra, quejarse. Lo agregué. – badmaash
Posible duplicado de * [Argumentos de plantilla predeterminados para plantillas de funciones] (http://stackoverflow.com/questions/2447458/default-template-arguments-for-function-templates) *. –