【发布时间】:2017-10-11 01:13:06
【问题描述】:
这些演示函数在 gcc 中不应该是无限循环 因为条件运算符应该只评估活动部分。
它们在 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(我认为?)将是一个解决方案。
-
我假设您知道可以通过创建函数模板的特化来解决问题。
-
致凯文:是的! "if constexpr" 语句(用 clang 测试过)对此很有效。感谢您的建议
标签: c++ gcc conditional-operator