2010-07-22 7 views
5

Chicos, estoy haciendo ejercicios de "The C++ Programming Language 3rd ed." y en la página 340 hay un ejemplo de la función:¿Podría Bjarne cometer un error? (mientras explica las plantillas), o todavía no entiendo?

template <class T, class C = Cmp<T> > // Here is a default argument 
// But as far as I'm concerned it's illegal to have a default argument in 
// a function template 
     int compare (const String<T>& str1, const String<T>& str2) 
     { 
     /*Some code*/ 
     } 

Así que mi pregunta es:
¿Hay algún error en un libro o estoy recibiendo este mal?

+2

Editado para eliminar las abreviaturas innecesarias e innecesario MAYÚSCULAS para la cordura de todos los interesados. –

+0

@Cogwheel del estándar actual. –

+0

@Cogwheel: me sale la idea de que es ilegal desde el estándar, 14.1/9, "Un argumento de plantilla predeterminado no se especificará en una declaración de plantilla de función o una definición de plantilla de función". –

Respuesta

9

Sí, el libro está mal en este caso. De hecho, es ilegal usar argumentos de plantilla predeterminados en las declaraciones de plantilla de función.

puede encontrar la referencia a este tema aquí http://www2.research.att.com/~bs/3rd_issues.html

+2

Y FWIW, están permitidos en C++ 0x. – GManNickG

+0

Sí, eso es probablemente lo que hace referencia a la observación "Votó para ser corregido en el siguiente estándar" en la página vinculada. – AnT

Cuestiones relacionadas