В докладе Несоответствующий 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.
Так что не так?