19ca5c425SRichard Smith // RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11
2*c6e68daaSAndy Gibbs // expected-no-diagnostics
39a587b01SFariborz Jahanian 
49a587b01SFariborz Jahanian // 13.3.3.2 Ranking implicit conversion sequences
59a587b01SFariborz Jahanian // conversion of A::* to B::* is better than conversion of A::* to C::*,
69a587b01SFariborz Jahanian struct A {
79a587b01SFariborz Jahanian int Ai;
89a587b01SFariborz Jahanian };
99a587b01SFariborz Jahanian 
109a587b01SFariborz Jahanian struct B : public A {};
119a587b01SFariborz Jahanian struct C : public B {};
129a587b01SFariborz Jahanian 
f(int C::*)139a587b01SFariborz Jahanian const char * f(int C::*){ return ""; }
f(int B::*)149a587b01SFariborz Jahanian int f(int B::*) { return 1; }
159a587b01SFariborz Jahanian 
169a587b01SFariborz Jahanian struct D : public C {};
179a587b01SFariborz Jahanian 
g(int B::*)189a587b01SFariborz Jahanian const char * g(int B::*){ return ""; }
g(int D::*)199a587b01SFariborz Jahanian int g(int D::*) { return 1; }
209a587b01SFariborz Jahanian 
test()219a587b01SFariborz Jahanian void test()
229a587b01SFariborz Jahanian {
239a587b01SFariborz Jahanian   int i = f(&A::Ai);
249a587b01SFariborz Jahanian 
259a587b01SFariborz Jahanian   const char * str = g(&A::Ai);
269a587b01SFariborz Jahanian }
279a587b01SFariborz Jahanian 
289a587b01SFariborz Jahanian // conversion of B::* to C::* is better than conversion of A::* to C::*
299a587b01SFariborz Jahanian typedef void (A::*pmfa)();
309a587b01SFariborz Jahanian typedef void (B::*pmfb)();
319a587b01SFariborz Jahanian typedef void (C::*pmfc)();
329a587b01SFariborz Jahanian 
339a587b01SFariborz Jahanian struct X {
349a587b01SFariborz Jahanian 	operator pmfa();
359a587b01SFariborz Jahanian 	operator pmfb();
369a587b01SFariborz Jahanian };
379a587b01SFariborz Jahanian 
389a587b01SFariborz Jahanian 
399a587b01SFariborz Jahanian void g(pmfc);
409a587b01SFariborz Jahanian 
test2(X x)419a587b01SFariborz Jahanian void test2(X x)
429a587b01SFariborz Jahanian {
439a587b01SFariborz Jahanian     g(x);
449a587b01SFariborz Jahanian }
459a587b01SFariborz Jahanian 
46