// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11 | |
struct A {}; | |
struct E {}; | |
struct R { | |
operator A*(); | |
operator E*(); // expected-note{{candidate function}} | |
}; | |
struct S { | |
operator A*(); | |
operator E*(); // expected-note{{candidate function}} | |
}; | |
struct B : R { | |
operator A*(); | |
}; | |
struct C : B { | |
}; | |
void foo(C c, int A::* pmf) { | |
int i = c->*pmf; | |
} | |
struct B1 : R, S { | |
operator A*(); | |
}; | |
struct C1 : B1 { | |
}; | |
void foo1(C1 c1, int A::* pmf) { | |
int i = c1->*pmf; | |
c1->*pmf = 10; | |
} | |
void foo1(C1 c1, int E::* pmf) { | |
int i = c1->*pmf; // expected-error {{use of overloaded operator '->*' is ambiguous}} \ | |
// expected-note {{because of ambiguity in conversion of 'C1' to 'E *'}} \ | |
// expected-note 4 {{built-in candidate operator}} | |
} |