Как включить в GCC C / C ++ «Условно с пропущенным операндом» (он же оператор Элвиса «?:») - PullRequest
1 голос
/ 14 октября 2019

В докладе Несоответствующий C ++ из CppCon2019 он представляет " Оператор Элвиса " в C ++, который является нестандартным расширением, поддерживаемым многими компиляторами.

Он работает, опуская средний операнд выражения ?::

std::shared_ptr<foo> read();
std::shared_ptr<foo> default_value();

auto read_or_default()
{
    return read() ?: default_value();
}

Это именно тот пример, взятый из слайда 11 презентации .

Однако, когда я собираю его на GCC 7.4.0 на Ubuntu 18.04 или с GCC 8.2.0 на MinGW, используя флаг -std=gnu++14, я получаю эту ошибку:

error: lvalue required as unary '&' operand
     return read() ?: default_value();
                                    ^

В разговоре этосказал, что это расширение присутствует в GCC хотя бы начиная с версии 4.1.2.

Так что не так?

1 Ответ

2 голосов
/ 14 октября 2019

Это не базовая функция «условные выражения с пропущенным операндом», которая дает сбой. Именно комбинация с std::shared:ptr вызывает ошибку в GCC, исправленную в GCC 9.1.

Приведенный ниже код работает с GCC 4.1.2:

int read();
int default_value();

int read_or_default()
{
    return read() ?: default_value();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...