我正在尝试使用if constexpr的教科书示例,并且在编译时遇到错误expected ‘(’ before ‘constexpr’
。
我正在使用g++ -std=c++17 test.cpp
进行编译,因此该版本应支持它。 Visual Studio Code可以理解这一点,并暗示此表达式将被编译为数字120
(正确)。
#include <iostream>
using std::cout;
using std::endl;
template <int N>
constexpr int fun() {
if constexpr (N <= 1) {
return 1;
} else {
return N * fun<N - 1>();
}
}
int main(int argc, char** argv) {
cout << fun<5>() << endl;
return 0;
}
此代码应正确编译
答案 0 :(得分:0)
您需要更新版本的GCC。版本7及更高版本对此提供支持。参见:
https://en.cppreference.com/w/cpp/compiler_support#cpp17
(搜索“如果是constexpr”。)
因此,请升级您的GCC版本。如果您使用的是Ubuntu,则可以添加工具链PPA以安装最新的可用GCC版本:
https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test