2010-09-29 5 views

Respuesta

6

(3) porque

C++ 03 [Section 14.1/11] dice

Si un parámetro de plantilla tiene una plantilla-argumento por defecto, todas las posteriores plantilla parámetros deben tener un valor predeterminado argumento de plantilla proporcionado.

+2

Gran respuesta +1. ¿Dónde puedo obtener una copia del estándar? – JoshD

+0

@JoshD: Puede encontrarlo [aquí] (http://www.open-std.org/jtc1/sc22/wg21/) (ISO/IEC 14882 2003 es C++ 03) –

+0

@JoshD: AFAIK puede lo obtienes gratis. Sin embargo, puede ver los borradores de la próxima norma. – ybungalobill

8

Por la misma razón por la cual:

void f(int = 0, int); 

falla.

No hay manera de usar tercera versión de parámetros por defecto:

template<class T = int, class U> class B { ... }; 

B<, short> var; // ??? no such syntax 
6

Si pones eso en algún contexto, la tercera vía de hecho puede ser legal, siempre que el segundo defecto se ha dado anteriormente.

template <class T, class U = double> 
struct X; 

template <class T = int, class U> //here 
struct X {}; 

int main() 
{ 
    X<> x; 
    X<float> y; 
    X<char, char> z; 
} 
+1

Sí, buena captura, +1. –

Cuestiones relacionadas