| // RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++0x | 
 |  | 
 | 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}} | 
 | } |