typename
Сообщает компилятору, что неизвестный тип identifier.
typename identifier;
Заметки
Используйте это ключевое слово только в определениях шаблона.
Это ключевое слово следует использовать, если имя зависит от полного имени в аргументе шаблона; он является необязательным, если проверенное имя не зависит от.Дополнительные сведения см. в разделе шаблоны и разрешение имен.
TypeName может использоваться любым типом в любом объявлении или определении шаблона.Он не допускается в списке базового класса, если в качестве аргумента шаблона к базовому классу шаблона.
template <class T>
class C1 : typename T::InnerType // Error - typename not allowed.
{};
template <class T>
class C2 : A<typename T::InnerType> // typename OK.
{};
TypeName ключевое слово также можно использовать вместо класс в списках параметров шаблона.Например, следующие выписки идентичны:
template<class T1, class T2>...
template<typename T1, typename T2>...
Пример
// typename.cpp
template<class T> class X
{
typename T::Y m_y; // treat Y as a type
};
int main()
{
}