typename
Indica al compilador que un identificador desconocido es un tipo.
typename identifier;
Comentarios
Utilice esta palabra clave solo en definiciones de plantilla.
Esta palabra clave se debe usar si el nombre es un nombre completo dependiente de un argumento de plantilla; es opcional si el nombre completo no es dependiente. Para obtener más información, vea Plantillas y resolución de nombres.
typename se puede usar en cualquier tipo en cualquier lugar de una declaración o definición de plantilla. No se permite en la lista de clases base, salvo como argumento de plantilla de una clase base de plantilla.
template <class T>
class C1 : typename T::InnerType // Error - typename not allowed.
{};
template <class T>
class C2 : A<typename T::InnerType> // typename OK.
{};
La palabra clave typename también se puede usar en lugar de class en las listas de parámetros de plantilla. Por ejemplo, las siguientes instrucciones son idénticas:
template<class T1, class T2>...
template<typename T1, typename T2>...
Ejemplo
// typename.cpp
template<class T> class X
{
typename T::Y m_y; // treat Y as a type
};
int main()
{
}