4

为什么此代码在 Visual C++ 中会生成以下错误?
它是编译器中的错误还是代码无效?

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

test 在您使用它时尚未声明。在 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 回答