1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s 2*67e74705SXin Li namespace N { 3*67e74705SXin Li template<typename T> class A { }; 4*67e74705SXin Li 5*67e74705SXin Li template<> class A<int> { }; 6*67e74705SXin Li 7*67e74705SXin Li template<> class A<float>; // expected-note{{forward declaration of 'N::A<float>'}} 8*67e74705SXin Li 9*67e74705SXin Li class B : public A<int> { }; 10*67e74705SXin Li } 11*67e74705SXin Li 12*67e74705SXin Li class C1 : public N::A<int> { }; 13*67e74705SXin Li 14*67e74705SXin Li class C2 : public N::A<float> { }; // expected-error{{base class has incomplete type}} 15*67e74705SXin Li 16*67e74705SXin Li struct D1 { 17*67e74705SXin Li operator N::A<int>(); 18*67e74705SXin Li }; 19*67e74705SXin Li 20*67e74705SXin Li namespace N { 21*67e74705SXin Li struct D2 { 22*67e74705SXin Li operator A<int>(); 23*67e74705SXin Li }; 24*67e74705SXin Li } 25