0

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;
}
4

1 に答える 1

2

注意して読んでください。規格はそれを禁止しておらず、注記でも言及しています。

于 2012-09-09T09:13:34.423 に答える