テンプレートの定義で、不明な識別子が型であるコンパイラに対するヒントを提供します。In template definitions, provides a hint to the compiler that an unknown identifier is a type. テンプレート パラメーター リストでは、型パラメーターを指定に使用されます。In template parameter lists, is used to specify a type parameter.


typename identifier;


テンプレート定義内の名前がテンプレート引数に依存する修飾名である場合、このキーワードを使用する必要があります。修飾名に依存しない場合は省略可能です。This keyword must be used if a name in a template definition is a qualified name that is dependent on a template argument; it is optional if the qualified name is not dependent. 詳細については、次を参照してください。テンプレートと名前解決します。For more information, see Templates and Name Resolution.

typename任意の型定義またはテンプレート宣言の任意の場所で使用できます。typename can be used by any type anywhere in a template declaration or definition. テンプレート基底クラスへのテンプレート引数として使用する場合を除いて、このキーワードを基底クラス リストで使用することはできません。It is not allowed in the base class list, unless as a template argument to a template base class.

template <class T>
class C1 : typename T::InnerType // Error - typename not allowed.
template <class T>
class C2 : A<typename T::InnerType>  // typename OK.

Typenameの代わりにキーワードを使用することもクラステンプレート パラメーターの一覧表示されます。The typename keyword can also be used in place of class in template parameter lists. たとえば、次のステートメントと同じ意味です。For example, the following statements are semantically equivalent:

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()

関連項目See also