このコードがVisualC++で次のエラーを生成するのはなぜですか?
コンパイラのバグですか、それともコードが無効ですか?
template<int N> int test(int = sizeof(test<N - 1>()));
template<> int test<0>(int);
int main() { return sizeof(test<1>()); }
再帰型または関数従属コンテキストが複雑すぎます
このコードがVisualC++で次のエラーを生成するのはなぜですか?
コンパイラのバグですか、それともコードが無効ですか?
template<int N> int test(int = sizeof(test<N - 1>()));
template<> int test<0>(int);
int main() { return sizeof(test<1>()); }
再帰型または関数従属コンテキストが複雑すぎます
テストは、使用している時点ではまだ宣言されていません。同様の問題がC++11でよく発生します。
template<int N> auto test() -> decltype(test<N - 1>());
template<> auto test<0>() -> int;
int main() { return sizeof(test<1>()); }
将来それを変えるための議論があります。コンパイルするコードのバージョン:
template<int N> int test(int);
template<> int test<0>(int);
template<int N> int test() { return test<N>(sizeof(test<N - 1>())); }
int main() { return sizeof(test<1>()); }