1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11 2*67e74705SXin Li 3*67e74705SXin Li struct A {}; 4*67e74705SXin Li struct E {}; 5*67e74705SXin Li 6*67e74705SXin Li struct R { 7*67e74705SXin Li operator A*(); 8*67e74705SXin Li operator E*(); // expected-note{{candidate function}} 9*67e74705SXin Li }; 10*67e74705SXin Li 11*67e74705SXin Li 12*67e74705SXin Li struct S { 13*67e74705SXin Li operator A*(); 14*67e74705SXin Li operator E*(); // expected-note{{candidate function}} 15*67e74705SXin Li }; 16*67e74705SXin Li 17*67e74705SXin Li struct B : R { 18*67e74705SXin Li operator A*(); 19*67e74705SXin Li }; 20*67e74705SXin Li 21*67e74705SXin Li struct C : B { 22*67e74705SXin Li 23*67e74705SXin Li }; 24*67e74705SXin Li foo(C c,int A::* pmf)25*67e74705SXin Livoid foo(C c, int A::* pmf) { 26*67e74705SXin Li int i = c->*pmf; 27*67e74705SXin Li } 28*67e74705SXin Li 29*67e74705SXin Li struct B1 : R, S { 30*67e74705SXin Li operator A*(); 31*67e74705SXin Li }; 32*67e74705SXin Li 33*67e74705SXin Li struct C1 : B1 { 34*67e74705SXin Li 35*67e74705SXin Li }; 36*67e74705SXin Li foo1(C1 c1,int A::* pmf)37*67e74705SXin Livoid foo1(C1 c1, int A::* pmf) { 38*67e74705SXin Li int i = c1->*pmf; 39*67e74705SXin Li c1->*pmf = 10; 40*67e74705SXin Li } 41*67e74705SXin Li foo1(C1 c1,int E::* pmf)42*67e74705SXin Livoid foo1(C1 c1, int E::* pmf) { 43*67e74705SXin Li int i = c1->*pmf; // expected-error {{use of overloaded operator '->*' is ambiguous}} \ 44*67e74705SXin Li // expected-note {{because of ambiguity in conversion of 'C1' to 'E *'}} \ 45*67e74705SXin Li // expected-note 4 {{built-in candidate operator}} 46*67e74705SXin Li } 47