このページはC++11に採用された言語機能の変更を解説しています。
のちのC++規格でさらに変更される場合があるため関連項目を参照してください。
概要
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