blob: a4394aa21f6e50b690963bd5faca3a86e58587e1 [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}
John McCall323c3102009-12-22 22:26:37 +000050
51// PR5847
52namespace test2 {
53 namespace ns {
54 void foo();
55 }
56
57 template <class T> void bar(T* ptr) {
58 using ns::foo;
59 foo();
60 }
61
62 template void bar(char *);
63}