1 | // RUN: %clang_cc1 -fsyntax-only -verify %s |
2 | |
3 | // PR5061 |
4 | namespace a { |
5 | template <typename T> class C {}; |
6 | } |
7 | namespace b { |
8 | template<typename T> void f0(a::C<T> &a0) { } |
9 | } |
10 | |
11 | |
12 | namespace test1 { |
13 | int a = 0; |
14 | template <class T> class Base { }; |
15 | template <class T> class Derived : public Base<T> { |
16 | int foo() { |
17 | return test1::a; |
18 | } |
19 | }; |
20 | } |
21 | |
22 | namespace test2 { |
23 | class Impl { |
24 | public: |
25 | int foo(); |
26 | }; |
27 | template <class T> class Magic : public Impl { |
28 | int foo() { |
29 | return Impl::foo(); |
30 | } |
31 | }; |
32 | } |
33 | |
34 | namespace PR6063 { |
35 | template <typename T> void f(T, T); |
36 | |
37 | namespace detail |
38 | { |
39 | using PR6063::f; |
40 | } |
41 | |
42 | template <typename T> |
43 | void g(T a, T b) |
44 | { |
45 | detail::f(a, b); |
46 | } |
47 | } |
48 | |
49 | namespace PR12291 { |
50 | template <typename T> |
51 | class Outer2 { |
52 | template <typename V> |
53 | template <typename W> |
54 | class Outer2<V>::Inner; // expected-error{{nested name specifier 'Outer2<V>::' for declaration does not refer into a class, class template or class template partial specialization}} |
55 | }; |
56 | } |
57 | |