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

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

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

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

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

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