最終更新日時:
が更新

履歴 編集

依存名に対するtypenameとtemplateの制限緩和(C++11)

概要

テンプレート内で、テンプレートパラメータに依存する名前を使用する場合には、typenameキーワードを先頭に付ける必要がある。

テンプレート内で、推論できないテンプレートパラメータを持つメンバ関数を呼び出す場合には、メンバ関数名の前にtemplateキーワードを付ける必要がある。

C++03まで、テンプレート外でtypenametemplateを付けるとコンパイルエラーになっていたが、C++11では、テンプレート外でtypenametemplateを付けることが許可された。

これは、テンプレート内とテンプレート外で、共通のコードを利用できるようにするためである。

#include <vector>

struct X {
  template <int N>
  int get() const
  {
      return N;
  }
};

int main()
{
  typename std::vector<int>::iterator it; // OK

  int value = X().template get<3>(); // OK
}

出力

参照