Недавно я понял, что в GCC и clang можно использовать троичный оператор без середины (работает ?: или ? :), и он вставит первое выражение в середину:

// outputs 2
cout << (2 ?: 4);
// outputs 3
cout << (0 ?  : 3);

Где об этом говорится в стандарте? Я посмотрел и ничего об этом не увидел.

Ответы (1)

Этого нет в стандарте вообще.

То, что вы наблюдаете, является расширением GCC: https://gcc.gnu.org/onlinedocs/gcc/Conditionals.html

Если его опустить, его значение будет взято из первого операнда до контекстного преобразования в bool.
Ценность расширений заключается в отсутствии повторения побочных эффектов и уменьшении размера исходных кодов.

2022 WebDevInsider