http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49165
--- Comment #4 from Jason Merrill <jason at gcc dot gnu.org> 2011-05-25 20:04:47 UTC --- Yes, that's right. 5.16/2: If either the second or the third operand has type (possibly cv-qualified) void, then the lvalue-to-rvalue (4.1), array-to-pointer (4.2), and function-to-pointer (4.3) standard conversions are performed on the second and third operands, and one of the following shall hold: — The second or the third operand (but not both) is a throw-expression (15.1); the result is of the type of the other and is a prvalue. — Both the second and the third operands have type void; the result is of type void and is a prvalue. [ Note: This includes the case where both operands are throw-expressions. — end note ]