blob: 6bbfe65ee01eb3e521b79c463cbe33cb5d087929 [file] [log] [blame]
Daniel Dunbara5728872009-12-15 20:14:24 +00001// RUN: %clang_cc1 -fsyntax-only -verify %s
Anders Carlsson0d8df782009-08-29 19:37:28 +00002
John McCallfda8e122009-12-03 00:58:24 +00003namespace test0 {
4 namespace N { }
Douglas Gregor48c32a72009-11-17 06:07:40 +00005
John McCallfda8e122009-12-03 00:58:24 +00006 template<typename T>
7 struct A {
8 void f();
9 };
Anders Carlsson0d8df782009-08-29 19:37:28 +000010
John McCallfda8e122009-12-03 00:58:24 +000011 template<typename T>
12 struct B : A<T> {
13 using A<T>::f;
14
15 void g() {
16 using namespace N;
17 f();
18 }
19 };
20
21 template struct B<int>;
22}
23
24namespace test1 {
25 template <class Derived> struct Visitor1 {
26 void Visit(struct Object1*);
27 };
28 template <class Derived> struct Visitor2 {
29 void Visit(struct Object2*); // expected-note {{candidate function}}
30 };
31
32 template <class Derived> struct JoinVisitor
33 : Visitor1<Derived>, Visitor2<Derived> {
34 typedef Visitor1<Derived> Base1;
35 typedef Visitor2<Derived> Base2;
36
37 void Visit(struct Object1*); // expected-note {{candidate function}}
38 using Base2::Visit;
39 };
40
41 class Knot : JoinVisitor<Knot> {
42 };
43
44 void test() {
45 Knot().Visit((struct Object1*) 0);
46 Knot().Visit((struct Object2*) 0);
47 Knot().Visit((struct Object3*) 0); // expected-error {{no matching member function for call}}
Anders Carlsson0d8df782009-08-29 19:37:28 +000048 }
John McCallfda8e122009-12-03 00:58:24 +000049}