Ответ 1
GCC предоставляет это как расширение . Это не в стандарте С++.
Семантика заключается в том, что если условие отличное от нуля, значение выражения равно выражению условия.
Неявное требование состоит в том, что условие должно быть совместимо с типом с третьим операндом, т.е. можно преобразовать в другое, следуя обычным правилам условного оператора.
Важно отметить, что если условие вычислено из функции с побочными эффектами, это значение не будет пересчитано с помощью этого расширения:
opt() ?: ""; //opt called once
opt() ? opt() : ""; //opt called twice