xref: /aosp_15_r20/external/clang/test/SemaTemplate/qualified-id.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s
2*67e74705SXin Li 
3*67e74705SXin Li // PR5061
4*67e74705SXin Li namespace a {
5*67e74705SXin Li   template <typename T> class C {};
6*67e74705SXin Li }
7*67e74705SXin Li namespace b {
f0(a::C<T> & a0)8*67e74705SXin Li   template<typename T> void f0(a::C<T> &a0) { }
9*67e74705SXin Li }
10*67e74705SXin Li 
11*67e74705SXin Li 
12*67e74705SXin Li namespace test1 {
13*67e74705SXin Li   int a = 0;
14*67e74705SXin Li   template <class T> class Base { };
15*67e74705SXin Li   template <class T> class Derived : public Base<T> {
foo()16*67e74705SXin Li     int foo() {
17*67e74705SXin Li       return test1::a;
18*67e74705SXin Li     }
19*67e74705SXin Li   };
20*67e74705SXin Li }
21*67e74705SXin Li 
22*67e74705SXin Li namespace test2 {
23*67e74705SXin Li   class Impl {
24*67e74705SXin Li   public:
25*67e74705SXin Li     int foo();
26*67e74705SXin Li   };
27*67e74705SXin Li   template <class T> class Magic : public Impl {
foo()28*67e74705SXin Li     int foo() {
29*67e74705SXin Li       return Impl::foo();
30*67e74705SXin Li     }
31*67e74705SXin Li   };
32*67e74705SXin Li }
33*67e74705SXin Li 
34*67e74705SXin Li namespace PR6063 {
35*67e74705SXin Li   template <typename T> void f(T, T);
36*67e74705SXin Li 
37*67e74705SXin Li   namespace detail
38*67e74705SXin Li   {
39*67e74705SXin Li     using PR6063::f;
40*67e74705SXin Li   }
41*67e74705SXin Li 
42*67e74705SXin Li   template <typename T>
g(T a,T b)43*67e74705SXin Li   void g(T a, T b)
44*67e74705SXin Li   {
45*67e74705SXin Li     detail::f(a, b);
46*67e74705SXin Li   }
47*67e74705SXin Li }
48*67e74705SXin Li 
49*67e74705SXin Li namespace PR12291 {
50*67e74705SXin Li   template <typename T>
51*67e74705SXin Li   class Outer2 {
52*67e74705SXin Li     template <typename V>
53*67e74705SXin Li     template <typename W>
54*67e74705SXin Li     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*67e74705SXin Li   };
56*67e74705SXin Li }
57