Auch wenn es sich um eine nicht-normative Notiz ist, glaube ich, eine Antwort kann durch n3797 [temp.names]/6
gegeben werden, wie der Fall mit dem Präfix typename
ist, das template
Präfix erlaubt in Fällen, in denen dies nicht unbedingt notwendig ist; wenn der verschachtelte Name-Spezifizierer oder der Ausdruck auf der linken Seite der ->
oder .
nicht von einem Template-Parameter abhängig ist, oder die Verwendung nicht im Bereich einer Vorlage erscheint.
In dem Beispiel des OP, das Präfix template
liegt außerhalb des Umfangs der Schablone und der vorangehende nested-name-Spezifizierer ist nicht abhängig eingesetzt. Daher wird das Präfix template
nicht benötigt, aber hier erlaubt.
[expr.prim.general]/8
qualifizierte Nummer:
verschachtelten-name-specifiertemplate
opt unqualifizierte -id
Plus [temp.names]/5
Ein Name durch das Schlüsselwort voran template
soll sein ein Template-id oder der Name einer Klassenvorlage verweisen soll.
[temp.names]/1 sagt, dass B<int>
ist in der Tat ein (Einfach-) Template-id.
B ist eine Vorlage Vorlage-abhängigen Typ, so ist die zweite Syntax vollkommen korrekt. – Quentin
Können Sie mich auf die Seite der Norm verweisen, die diese Verwendung angibt? Vielen Dank. – xmllmx
@peppe Kein Duplikat, da Sie hier nicht 'template' verwenden müssen. – juanchopanza