C++ Logo

std-discussion

Advanced search

Re: Name lookup

From: Andrew Schepler <aschepler_at_[hidden]>
Date: Wed, 26 Feb 2025 08:36:12 -0500
On Wed, Feb 26, 2025 at 8:07 AM Russell Shaw via Std-Discussion <
std-discussion_at_[hidden]> wrote:

> Hi,
>
> In [class.member.lookup], using g++, i get "error: request for member ‘x’
> is
> ambiguous" for 'f.x = 0;'
>

clang++ 19.1.0, icpx 2025.0.0, and MSVC 19 all compile it without errors or
warning, matching the Standard's requirements. A gcc bug report is already
open: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77725


> ------------------------------------------------------
> example 1
>
> struct A { int x; }; // S(x,A) = { { A::x }, { A } }
> struct B { float x; }; // S(x,B) = { { B::x }, { B } }
> struct C: public A, public B { }; // S(x,C) = { invalid, { A in C, B in
> C } }
> struct D: public virtual C { }; // S(x,D) = S(x,C)
> struct E: public virtual C { char x; }; // S(x,E) = { { E::x }, { E }
> }
> struct F: public D, public E { }; // S(x,F) = S(x,E)
>
> int main() {
> F f;
> f.x = 0; // OK, lookup finds E::x
> }
> ------------------------------------------------------
>
> I agree with g++ because the inheritance diagram is:
>
> A.x B.x
> \ /
> C
> / \
> D E.x
> \ /
> F
>
> f.x could be A.x, B.x, or E.x, but the standard is saying that it's
> unambiguous.
> --
> Std-Discussion mailing list
> Std-Discussion_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/std-discussion
>

Received on 2025-02-26 13:36:27