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