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

            Bug ID: 119448
           Summary: Private base class name of base class seems should be
                    inaccessible in friend class declaration in its
                    derived class
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Keywords: accepts-invalid
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: rush102333 at gmail dot com
  Target Milestone: ---

Consider:

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

struct payload {};

struct base: private payload {
};

struct derived: base {
    friend class payload;
};

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

https://godbolt.org/z/KadzWvMTK

The above code is currently rejected by clang and EDG, while accepted by gcc
and MSVC.

The diagnostic of clang:

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

<source>:7:18: error: 'payload' is a private member of 'payload'
    7 |     friend class payload;
      |                  ^
<source>:3:14: note: constrained by private inheritance here
    3 | struct base: private payload {
      |              ^~~~~~~~~~~~~~~
<source>:1:8: note: member is declared here
    1 | struct payload {};
      |        ^
1 error generated.

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

See discussion on llvm bug tracker:
https://github.com/llvm/llvm-project/issues/121258

Reply via email to