https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118236

            Bug ID: 118236
           Summary: gcc does not realize ambiguous friend class
                    declaration with multiple using namespace
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: wangbopku15 at gmail dot com
  Target Milestone: ---

Consider the following code:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

namespace N1 { struct A { }; }
namespace N2 { struct A { }; }
using namespace N1;
using namespace N2;

struct B
{
   friend class A;
};

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This should be invalid as the 'friend class A' declaration should be both
'N1::A' and 'N2::A' aaccording to the 'using namespace' statements above,
leading to ambiguity.

Both clang and MSVC reject the code. The diagnostic of clang says that:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

<source>:8:17: error: reference to 'A' is ambiguous
    8 |    friend class A;
      |                 ^
<source>:1:23: note: candidate found by name lookup is 'N1::A'
    1 | namespace N1 { struct A { }; }
      |                       ^
<source>:2:23: note: candidate found by name lookup is 'N2::A'
    2 | namespace N2 { struct A { }; }

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Please see https://godbolt.org/z/6Eev3xfbv

Reply via email to