1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 struct T { 3 void f(); 4 }; 5 6 struct A { 7 T* operator->(); // expected-note{{candidate function}} 8 }; 9 10 struct B { 11 T* operator->(); // expected-note{{candidate function}} 12 }; 13 14 struct C : A, B { 15 }; 16 17 struct D : A { }; 18 19 struct E; // expected-note {{forward declaration of 'E'}} 20 21 void f(C &c, D& d, E& e) { 22 c->f(); // expected-error{{use of overloaded operator '->' is ambiguous}} 23 d->f(); 24 e->f(); // expected-error{{incomplete definition of type}} 25 } 26 27 // rdar://8875304 28 namespace rdar8875304 { 29 class Point {}; 30 class Line_Segment{ public: Line_Segment(const Point&){} }; 31 class Node { public: Point Location(){ Point p; return p; } }; 32 33 void f() 34 { 35 Node** node1; 36 Line_Segment(node1->Location()); // expected-error {{not a structure or union}} 37 } 38 } 39 40 41 namespace arrow_suggest { 42 43 template <typename T> 44 class wrapped_ptr { 45 public: 46 wrapped_ptr(T* ptr) : ptr_(ptr) {} 47 T* operator->() { return ptr_; } 48 void Check(); // expected-note {{'Check' declared here}} 49 private: 50 T *ptr_; 51 }; 52 53 class Worker { 54 public: 55 void DoSomething(); // expected-note {{'DoSomething' declared here}} 56 void Chuck(); 57 }; 58 59 void test() { 60 wrapped_ptr<Worker> worker(new Worker); 61 worker.DoSomething(); // expected-error {{no member named 'DoSomething' in 'arrow_suggest::wrapped_ptr<arrow_suggest::Worker>'; did you mean to use '->' instead of '.'?}} 62 worker.DoSamething(); // expected-error {{no member named 'DoSamething' in 'arrow_suggest::wrapped_ptr<arrow_suggest::Worker>'; did you mean to use '->' instead of '.'?}} \ 63 // expected-error {{no member named 'DoSamething' in 'arrow_suggest::Worker'; did you mean 'DoSomething'?}} 64 worker.Chuck(); // expected-error {{no member named 'Chuck' in 'arrow_suggest::wrapped_ptr<arrow_suggest::Worker>'; did you mean 'Check'?}} 65 } 66 67 } // namespace arrow_suggest 68