typename
Indique au compilateur qu'un identificateur inconnu est un type.
typename identifier;
Notes
Utilisez ce mot clé uniquement dans les définitions de modèle.
Ce mot clé doit être utilisé si le nom est un nom dépendant qualifié dans un argument template. Il est facultatif si le nom qualifié n'est pas dépendant. Pour plus d'informations, consultez Modèles et résolution de noms.
Le mot clé typename peut être utilisé par tout type n'importe où dans une déclaration ou définition de modèle. Il n'est pas autorisé dans la liste des classes de base sauf sous forme d'argument template pour une classe de base de modèle.
template <class T>
class C1 : typename T::InnerType // Error - typename not allowed.
{};
template <class T>
class C2 : A<typename T::InnerType> // typename OK.
{};
Le mot clé typename peut également être utilisé à la place de class dans les listes de paramètres de modèle. Par exemple, les instructions suivantes sont identiques :
template<class T1, class T2>...
template<typename T1, typename T2>...
Exemple
// typename.cpp
template<class T> class X
{
typename T::Y m_y; // treat Y as a type
};
int main()
{
}