Ambiguous name lookup with C++20 using-enum-declaration

Consider following code snippet with C++20 using-enum-declaration:

namespace A { enum A {}; };

using namespace A;
using enum A;

gcc-trunk rejects it with:

<source>:4:12: error: reference to 'A' is ambiguous
    4 | using enum A;
      |            ^
<source>:1:20: note: candidates are: 'enum A::A'
    1 | namespace A { enum A {}; };
      |                    ^
<source>:1:11: note:                 'namespace A { }'
    1 | namespace A { enum A {}; };
      |           ^
<source>:4:12: error: 'A' has not been declared
    4 | using enum A;
      |            ^

However, msvc accepts it. Interestingly, if I add a namespace qualifier for enum A:

namespace A { enum A {}; };

using namespace A;
using enum A::A;

gcc accepts it this time, but msvc rejects it with:

<source>(4): error C2872: 'A': ambiguous symbol
<source>(1): note: could be 'A'
<source>(1): note: or       'A::A'

Which compiler is right?

Source: Windows Questions C++

LEAVE A COMMENT