El siguiente fragmento de código se compila en gcc-4.7.1:¿Puede funcionar el parámetro de la plantilla predeterminada antes de los no predeterminados?
struct X {};
template <class T = X, typename U>
void f(const U& m) {
}
int main() {
f<>(0);
}
Sin embargo, éste no lo hace:
struct X {};
template <class T = X, typename U>
void f(const U& m) {
auto g = []() {};
}
int main() {
f<>(0);
}
gcc-4.7.1 se queja:
c.cpp: In function 'void f(const U&)':
c.cpp:5:15: error: no default argument for 'U'
Entonces mi pregunta es: ¿está poniendo los parámetros por defecto antes de que los parámetros no predeterminados se corrijan en la plantilla de función? Si es así, ¿por qué no compila el segundo? Si no, ¿por qué compila el primero? ¿Qué dice el estándar C++ 11 sobre esta sintaxis?
http://stackoverflow.com/questions/2447458/default-template-arguments-for-function-templates – Andrew
@Andrew, la publicación que ha proporcionado es demasiado larga. ¿Puede indicar qué respuesta dice acerca de si es correcto colocar el parámetro predeterminado antes que los no predeterminados? –
@icando: no hay nada en el estándar que * prohíba * poner argumentos de plantilla predeterminados para plantillas de funciones en cualquier lugar. Solo las plantillas * class * están restringidas. –