typename キーワード

C++型を参照する修飾名やテンプレート・パラメーターに依存する修飾名がある場合は、 キーワード typename を使用してください。 キーワード typename のみを、テンプレート宣言または定義で使用してください。 次の例は、キーワード typename の使用法を示しています。

template<class T> class A
{
  T::x(y);
  typedef char C;
  A::C d;
}

ステートメント T::x(y) は、あいまいです。 そのステートメントは、非ローカル引き数 y を使用した関数 x() の呼び出しや、 または、型 T::x を使用して変数 y の宣言にすることができます。 C++ は、このステートメントを関数呼び出しとして解釈します。 コンパイラーにこのステートメントを宣言として解釈させるには、 キーワード typename をそのステートメントの開始位置に追加します。 ステートメント A::C d; は、書式が不正です。 クラス A は、A<T> も参照するので、テンプレート・パラメーターに依存します。 キーワード typename をこの宣言の開始位置に追加する必要があります。

  typename A::C d;
 

テンプレート・パラメーター宣言で、キーワード class の代わりに、 キーワード typename も使用できます。

関連参照

IBM Copyright 2003