这些演示函数不应该是gcc 中的无限循环,因为条件运算符应仅评估活动部分。C++中的条件运算符错误?
它们在Visual Studio 2015中正确编译,但在g ++ 6.3中给出了无限递归错误编译错误。我错过了什么?
template <int n>
constexpr int infinite_loop_error(){
return (n) ? infinite_loop_error<n - 1>() : 0;
}
template <int n>
constexpr int infinite_loop_error_2(){
if (n) return infinite_loop_error_2<n - 1>();
else return 0;
}
void main() {
infinite_loop_error<3>();
infinite_loop_error_2<3>();
}
标准中的任何事情都说这不应该是无限递归吗?如果在C++ 17(我认为?),也许constexpr将是一个解决方案。 – Kevin
我假设你知道你可以通过创建功能模板的特化解决问题。凯文: –
:是的! “如果constexpr”声明(与clang一起测试)适用于此。感谢您的建议 – programmer