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}}
 | |
| }
 |