[Bug c++/118242] New: GCC fails to identify ambiguous member name in friend declaration in multiple inheritance
wangbopku15 at gmail dot com
gcc-bugzilla@gcc.gnu.org
Mon Dec 30 09:47:08 GMT 2024
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118242
Bug ID: 118242
Summary: GCC fails to identify ambiguous member name in friend
declaration in multiple inheritance
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 invalid code is now accepted by GCC:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
struct M1 {
struct I{ };
};
struct M2 {
struct I{};
};
struct J : public M2::I,public M1::I{
friend class I;
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The declaration of 'friend class I' inside 'struct J' should be erroneous, as
this scope contains both 'M2::I' and 'M1::I' according to the multiple
inheritance and merely using 'I' is ambiguous.
Clang rejects it by complaining that:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:11:18: error: member 'I' found in multiple base classes of different
types
11 | friend class I;
| ^
<source>:6:12: note: member type 'M2::I' found by ambiguous name lookup
6 | struct I{};
| ^
<source>:2:12: note: member type 'M1::I' found by ambiguous name lookup
2 | struct I{ };
| ^
1 error generated.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MSVC and EDG also reject it. Please see https://godbolt.org/z/crj9P9K63
More information about the Gcc-bugs
mailing list