TypeName
Informa o compilador que um identificador desconhecido é um tipo.
typename identifier;
Comentários
Use esta palavra-chave somente em definições de modelo.
Esta palavra-chave deve ser usado se o nome é um nome qualificado dependente de um argumento de modelo; ele é opcional se o nome qualificado não é dependente.Para obter mais informações, consulte modelos e resolução de nomes.
TypeName pode ser usado por qualquer tipo em qualquer lugar em uma declaração de modelo ou definição.Não é permitido na lista de classe base, a menos que como um argumento de modelo para uma classe base do modelo.
template <class T>
class C1 : typename T::InnerType // Error - typename not allowed.
{};
template <class T>
class C2 : A<typename T::InnerType> // typename OK.
{};
O typename palavra-chave também pode ser usado no lugar de classe no parâmetro de modelo de lista.Por exemplo, as instruções a seguir são idênticas:
template<class T1, class T2>...
template<typename T1, typename T2>...
Exemplo
// typename.cpp
template<class T> class X
{
typename T::Y m_y; // treat Y as a type
};
int main()
{
}