最終更新日時:
が更新

履歴 編集

テンプレート再帰回数の制限緩和(C++11)

概要

C++03まで、テンプレートの再帰回数は、「17回以上であることを実装に推奨する」というものであった。

C++11からはこれが、1024回に緩和された。

備考

コンパイラによっては、コンパイルオプションでテンプレート再帰回数の上限を設定できる。

GCCとClangでは、-ftemplate-depthオプションで設定できる:

g++ main.cpp -ftemplate-depth=1024

ここの1024を任意の値に変更することで、再帰回数の上限を設定できる。

GCC 5.2時点で、デフォルトは900回。

Clang 3.7時点で、デフォルトは256回。

// 再帰回数の上限を確認する用のコード。
// 範囲[1, N]の総和を求めるメタ関数sigma_nを定義している。
//
// sigma_nメタ関数に与えるテンプレート引数を、
// 任意の値に変更して再帰回数の上限を確認してください。
#include <iostream>

template <int N>
struct sigma_n {
  static constexpr int value = N + sigma_n<N - 1>::value;
};

template <>
struct sigma_n<0> {
  static constexpr int value = 0;
};

int main()
{
  std::cout << sigma_n<10>::value << std::endl;
}

出力

55

参照