這些演示函數不應該是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