4

このコードがVisualC++で次のエラーを生成するのはなぜですか?
コンパイラのバグですか、それともコードが無効ですか?

template<int N> int test(int = sizeof(test<N - 1>()));
template<> int test<0>(int);
int main() { return sizeof(test<1>()); }

再帰型または関数従属コンテキストが複雑すぎます

4

1 に答える 1

4

テストは、使用している時点ではまだ宣言されていません。同様の問題が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>()); }
于 2013-01-08T10:32:23.500 に答える