Почему параметр шаблона не допускает «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 ++ что-нибудь сказать по этому поводу?