ISO/IEC 14882:2011 によると、三項演算子の 2 番目と 3 番目のオペランドの両方でスロー式を使用することはできません。
5.16 条件演算子 [expr.cond]
2 2 番目または 3 番目のオペランドの型が void の場合、左辺値から右辺値 (4.1)、配列からポインター (4.2)、関数からポインター (4.3) への標準変換が 2 番目と 3 番目のオペランドで実行されます。 — 2 番目または 3 番目のオペランド (両方ではない) がスロー式 (15.1) である。結果はもう一方の型であり、prvalue です。— 2 番目と 3 番目のオペランドの型は両方とも void です。結果は void 型で、prvalue です。[ 注: これには、両方のオペランドがスロー式である場合が含まれます。—終わりのメモ]
Comeau コンパイラと gcc の両方がこのコードを許可するのはなぜですか?
int main()
{
true ? throw 0 : throw 1;
}