https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118271
Bug ID: 118271
Summary: GCC complains on valid friend declaration of
overloaded type conversion operator in a derived class
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: ---
The following test is accepted by clang, MSVC, and EDG, but rejected by gcc:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class A{};
class B {
public:
operator A *() const;
};
class C : A {
friend B::operator A *() const;
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The diagnostic is somewhat confusing, which seems to complain that the
constructor of 'A' is not accessible:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:8:24: error: 'class A A::A' is inaccessible within this context
8 | friend B::operator A *() const;
| ^
<source>:1:8: note: declared here
1 | class A{};
| ^
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Please see https://godbolt.org/z/8v51E93Pd