nach ISO 14882: 2011 § 14.6.2.1:Einfacher Typspezifizierer ist Template-Parameter
A-Typ abhängig ist, wenn es ist - ein Template-Parameter,
Und nach ISO § 14882 : 2011 14.6:
ein Name in einer Template-Deklaration oder Definition verwendet und das ist abhängig von einem Template-Parameter wird angenommen, dass kein Typ, es sei dennzu nennen 210 Die zutreffende Namenssuche findet einen Typnamen, oder der Name ist mit dem Schlüsselwort typename.
Aber
template <typename T> class U
{
typename T t; // ill-formed, i have an compilier error
};
sind "abhängige Name" und "Name in einer Template-Deklaration oder Definition verwendet und das ist abhängig von einem Template-Parameter" das gleiche Konzept? Ich versuche, mein Missverständnis zu lösen, da es als Kollision zwischen Behauptungen in Standard (ISO 14882: 2011 § 14.6.2.1) und Beispiel aus Standard T t aussieht.
Was ist die eigentliche Frage? – Barry
'typename T t;' ist schlecht gebildet, weil [die Grammatik einen geschachtelten Namen erfordert] (http://eel.is/c++draft/temp.res#3). – cpplearner
Grammatik erfordert nicht verschachtelten Namen Specifier überall für Typname, seinen einzigen besonderen Fall für obligate Verwendung von Typname. Es gibt viele Fälle, in denen Typname erforderlich ist, aber der Spezifizierer für verschachtelte Namen wird nicht angewendet. Zum Beispiel p.x –
Pupkin