2010-10-30 5 views

Répondre

3

La position correcte est sans parenthèses

typename T::ABC 

parce que la forme avec des parenthèses

(typename T::ABC) 

est un opérateur de cast et non un type!

De plus, le mot-clé typename est nécessaire parce que T:ABC est un « type à charge »: si vous n'utilisez pas typename, l'expression T:ABC est interprété comme si ABC était membre de la classe T, et non pas un type imbriqué) .

3

Utilisez le mot-clé typename:

template<typename T> 
typename T::ABC& get(); 
1

Il doit être:

template<typename T> 
typename T::ABC& get(); 

mais je t ried, qui ne fonctionne pas:

template<typename T> 
(typename T::ABC)& get(); 
+0

Oui, je l'ai essayé aussi et je m'en suis rendu compte. Je ne sais pas pourquoi ça ne marche pas avec les parenthèses! – James

Questions connexes