Почему параметр шаблона не допускает «typename» после списка параметров

Шаблонное имя типа?

Когда используешьшаблон синтаксис как вtemplate <template <typename> class T>, необходимо использовать ключевое словоclass, как используяtypename выдает ошибку в соответствии с:

ошибка: параметр шаблона шаблона требует 'class' после списка параметров

Везде еще ключевые словаtypename а такжеclass являются взаимозаменяемы в базовом случае объявления параметра шаблона.

Вы можете утверждать, что требование при использовании шаблона шаблона является подсказкой, что вы должны пройтитип класса, но это не всегда так (особенно после того, как в C ++ 11 введены псевдонимы шаблонного типа).

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;
В чем причина этого?Есть ли конкретная причина, почемуtypename являетсяне разрешено в шаблонах объявлений?ЛиСтандарт C ++ что-нибудь сказать по этому поводу?

Ответы на вопрос(2)

Ваш ответ на вопрос