Fields with the same name across different anonymous unions inside one union

Viewed 455

Is it legal to have fields with the same name across different anonymous unions inside one union?

union Foo
{
    union
    {
        int bar;
    };

    union
    {
        int bar;
    };
};

This code fails to compile by GCC but works fine in MSVC.

1 Answers

This is not allowed by C++ standard. Any compiler which compiles this code is non-conformant.

See 10.4.1/1:

The names of the members of an anonymous union shall be distinct from the names of any other entity in the scope in which the anonymous union is declared.

Related