C ++ 17 отказывается компилировать пример, если constexpr дает ожидаемое ‘(’ перед «constexpr» - PullRequest
0 голосов
/ 25 мая 2019

Я пробую этот пример из учебника по использованию 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 голосов
/ 25 мая 2019

Вам нужна более свежая версия GCC.Версия 7 и выше поддерживает это.См .:

https://en.cppreference.com/w/cpp/compiler_support#cpp17

(Поиск "constexpr if".)

Так что обновите версию GCC.Если вы работаете в Ubuntu, вы можете добавить Toolchain PPA для установки последней доступной версии GCC:

https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test

...