三元运算符中的throw-expressions

时间:2012-09-09 09:10:25

标签: c++

根据ISO / IEC 14882:2011,我们不能在三元运算符的第二和第三个操作数中使用throw-expression:

  

5.16条件运算符[expr.cond]

     

2如果第二个或第三个操作数的类型为void,则为   lvalue-to-rvalue(4.1),array-to-pointer(4.2)和   函数到指针(4.3)标准转换是在   第二和第三个操作数,以下之一应该成立: -   第二个或第三个操作数(但不是两个)是一个throw-expression   (15.1);结果是另一个的类型,是一个prvalue。 -   第二个和第三个操作数都有类型void;结果是   类型为void,是一个prvalue。 [注意:这包括的情况   两个操作数都是throw-expressions。 - 后注]

为什么Comeau编译器和gcc都允许使用此代码?

int main()
{
   true ? throw 0 : throw 1;
}

1 个答案:

答案 0 :(得分:2)

仔细阅读,标准不禁止它,它甚至在注释中引用它。