Dies wird als "Name der injizierten Klasse" bezeichnet. Die Regel kommt speziell von [temp.local]:
Wie normale (Nicht-Template-) Klassen haben Klassenvorlagen einen Namen injected-class (Abschnitt 9). Die injected-Klasse- name kann als Vorlagenname oder Typname verwendet werden. Wenn es mit einer template-argument-list verwendet wird, als Template-Argument für einen Template Template-Parameter oder als endgültiger Bezeichner im elaborated-type-specifier von einer Freundesklassen-Template-Deklaration bezieht sie sich auf die Klassenvorlage selbst. Ansonsten ist gleichwertig zu Schablonenname gefolgt von den Template-Parametern der Klassenvorlage, eingeschlossen in
<>
.Im Rahmen einer Klassenvorlagenspezialisierung oder Teilspezialisierung, wenn der Name der eingefügten Klasse lautet Wird er als typname verwendet, entspricht er dem Vorlagennamen , gefolgt von den Vorlagenargumenten der Klasse Template-Spezialisierung oder Teilspezialisierung, eingeschlossen in & lt; & gt ;. [Beispiel:
%Vor%-endebeispiel]
Dies ist im Grunde der Einfachheit halber, so dass der Klassenname innerhalb der Klasse sich auf die Klasse selbst bezieht und nicht auf etwas Äußeres, das denselben Namen haben kann. Bei Klassenvorlagen wird möglicherweise viel Tipparbeit eingespart, wenn Sie eine lange Vorlagenargumentliste haben.