2010-09-29 5 views

Répondre

6

(3) est mal formé parce

C++ 03 [Section 14.1/11] dit

Si un modèle-paramètre a un modèle argument par défaut, tous les modèles-paramètres suivants ont un défaut argument de modèle fourni.

+2

Grande réponse +1. Où puis-je obtenir une copie de la norme? – JoshD

+0

@JoshD: Vous pouvez le trouver [ici] (http://www.open-std.org/jtc1/sc22/wg21/) (ISO/IEC 14882 2003 est C++ 03) –

+0

@JoshD: AFAIK vous pouvez Ne l'obtenez pas gratuitement. Cependant, vous pouvez regarder les brouillons de la prochaine norme. – ybungalobill

8

Pour la même raison pour laquelle:

void f(int = 0, int); 

échoue.

Il n'y a aucun moyen d'utiliser le paramètre par défaut 3ème version:

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

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

Si vous mettez cela dans un contexte, la troisième voie peut effectivement être légal, à condition que la deuxième défaut a été donné plus tôt.

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

Oui, bonne prise, +1. –

Questions connexes