Warum erlaubt ein Template-Template-Parameter nach der Parameterliste keinen 'Typnamen'?

Vorlage Vorlage Typenname?

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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage