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