Visual Studio C++ compiler weird behaviour

后端 未结 2 512
我在风中等你
我在风中等你 2020-12-14 15:07

I\'m just curious to know why this small piece of code compiles correctly (and without warnings) in Visual Studio. Maybe the result is the same with GCC and Clang,

2条回答
  •  感动是毒
    2020-12-14 15:16

    T(i_do_not_exist); is an object declaration with the same meaning as T i_do_not_exist;.

    N4567 § 6.8[stmt.ambig]p1

    There is an ambiguity in the grammar involving expression-statements and declarations: An expression-statement with a function-style explicit type conversion (5.2.3) as its leftmost subexpression can be indistinguishable from a declaration where the first declarator starts with a (. In those cases the statement is a declaration.

    § 8.3[dcl.meaning]p6

    In a declaration T D where D has the form

    ( D1 )

    the type of the contained declarator-id is the same as that of the contained declarator-id in the declaration

    T D1

    Parentheses do not alter the type of the embedded declarator-id, but they can alter the binding of complex declarators.

提交回复
热议问题