typename
不明な識別子が型であることをコンパイラに通知します。
typename identifier;
解説
このキーワードは、テンプレート定義でのみ使用します。
このキーワードは、名前がテンプレート引数に依存する修飾名である場合に使用する必要があります。修飾名がテンプレート引数に依存しない場合は、省略できます。 詳細については、「Templates and Name Resolution (テンプレートと名前解決)」を参照してください。
typename は、テンプレート定義またはテンプレート宣言の任意の場所で、任意の型により使用されます。 テンプレート基底クラスへのテンプレート引数として使用する場合を除いて、このキーワードを基底クラス リストで使用することはできません。
template <class T>
class C1 : typename T::InnerType // Error - typename not allowed.
{};
template <class T>
class C2 : A<typename T::InnerType> // typename OK.
{};
また、typename キーワードは、テンプレート パラメーター リストで class の代わりに使用できます。 たとえば、次のステートメントは同じです。
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()
{
}