| // RUN: clang-cc -fsyntax-only -verify %s |
| template <class Derived> struct Visitor1 { |
| void Visit(struct Object1*); |
| template <class Derived> struct Visitor2 { |
| void Visit(struct Object2*); // expected-note {{candidate function}} |
| template <class Derived> struct JoinVisitor |
| : Visitor1<Derived>, Visitor2<Derived> { |
| typedef Visitor1<Derived> Base1; |
| typedef Visitor2<Derived> Base2; |
| void Visit(struct Object1*); // expected-note {{candidate function}} |
| class Knot : JoinVisitor<Knot> { |
| Knot().Visit((struct Object1*) 0); |
| Knot().Visit((struct Object2*) 0); |
| Knot().Visit((struct Object3*) 0); // expected-error {{no matching member function for call}} |