47 lines
		
	
	
		
			850 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			850 B
		
	
	
	
		
			C++
		
	
	
	
// 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}}
 | 
						|
}
 |