Warum erlaubt ein Template-Template-Parameter nach der Parameterliste keinen 'Typnamen'?
Beim BenutzenVorlage Vorlage Syntax wie intemplate <template <typename> class T>
muss das Schlüsselwort verwendet werdenclass
, als mittypename
gibt einen Fehler in folgender Form aus:
Fehler: Template Template Parameter benötigt 'Klasse' nach der Parameterliste
Überall sonst die Stichwortetypename
undclass
sind austauschbar im Grundfall der Deklaration eines Template-Parameters.
Sie könnten argumentieren, dass die Anforderung bei der Verwendung einer Vorlagenvorlage ein Hinweis ist, von dem Sie erwarten, dass Sie eine bestehenKlassenartDies ist jedoch nicht immer der Fall (insbesondere nicht, nachdem in C ++ 11 Vorlagen-Aliase eingeführt wurden).
template <template <typename> class T> // 'class' keyword required.
struct Foo {
using type = T<int>;
};
template <typename T>
using type = T (*)();
using func_ptr_t = Foo<type>::type;
Was ist die Begründung dafür?Gibt es einen bestimmten Grund dafür?typename
istnicht In Template-Template-Deklarationen erlaubt?Tut dasC ++ Standard etwas dazu sagen?