如果constexpr在constexpr之前给出预期的“(”,则C ++ 17拒绝编译示例

时间:2019-05-25 06:49:03

标签: g++ c++17

我正在尝试使用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;
}

此代码应正确编译

1 个答案:

答案 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