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

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
((a *)0)->foo::x()

((T *)0)->foo::x()

Both are those are undefined because you are calling a method of a NULL
pointer.

(In reply to Andrew Pinski from comment #1)
> I think the code should be rejected.  Here is what Comeau online says:
> "ComeauTest.c", line 14: error: ambiguous class member reference -- type
> "b::foo"
>           (declared at line 4) used in preference to type "a::foo" (declared
>           at line 10)

And clang rejects this:
<source>:14:41: error: lookup of 'foo' in member access expression is ambiguous
void b::go() { printf("%i\n", ((a *)0)->foo::x()); }
                                        ^
<source>:10:13: note: lookup in the object type 'a' refers here
  typedef b foo;
            ^
<source>:4:20: note: lookup from the current scope refers here
  typedef struct a foo;
                   ^

Reply via email to