1*67e74705SXin Li template<typename T> class Vector; 2*67e74705SXin Li 3*67e74705SXin Li template<typename T> class List { 4*67e74705SXin Li public: 5*67e74705SXin Li void push_back(T); 6*67e74705SXin Li 7*67e74705SXin Li struct node {}; 8*67e74705SXin Li node *head; 9*67e74705SXin Li unsigned size; 10*67e74705SXin Li }; 11*67e74705SXin Li 12*67e74705SXin Li extern List<double> *instantiateListDoubleDeclaration; 13*67e74705SXin Li extern List<long> *instantiateListLongDeclaration; 14*67e74705SXin Li 15*67e74705SXin Li namespace A { 16*67e74705SXin Li class Y { 17*67e74705SXin Li template <typename T> friend class WhereAmI; 18*67e74705SXin Li }; 19*67e74705SXin Li } 20*67e74705SXin Li 21*67e74705SXin Li template <typename T> class A::WhereAmI { 22*67e74705SXin Li public: func()23*67e74705SXin Li static void func() {} 24*67e74705SXin Li }; 25*67e74705SXin Li 26*67e74705SXin Li template<typename T> struct Outer { 27*67e74705SXin Li struct Inner {}; 28*67e74705SXin Li }; 29*67e74705SXin Li 30*67e74705SXin Li template<bool, bool> struct ExplicitInstantiation { fExplicitInstantiation31*67e74705SXin Li void f() {} 32*67e74705SXin Li }; 33*67e74705SXin Li 34*67e74705SXin Li template<typename> struct DelayUpdates {}; 35*67e74705SXin Li 36*67e74705SXin Li template<typename T> struct OutOfLineInline { 37*67e74705SXin Li void f(); 38*67e74705SXin Li void g(); 39*67e74705SXin Li void h(); 40*67e74705SXin Li }; f()41*67e74705SXin Litemplate<typename T> inline void OutOfLineInline<T>::f() {} g()42*67e74705SXin Litemplate<typename T> inline void OutOfLineInline<T>::g() {} h()43*67e74705SXin Litemplate<typename T> inline void OutOfLineInline<T>::h() {} 44*67e74705SXin Li 45*67e74705SXin Li namespace EmitDefaultedSpecialMembers { 46*67e74705SXin Li template<typename T> struct SmallVectorImpl { SmallVectorImplSmallVectorImpl47*67e74705SXin Li SmallVectorImpl() {} ~SmallVectorImplSmallVectorImpl48*67e74705SXin Li ~SmallVectorImpl() {} // non-trivial dtor 49*67e74705SXin Li }; 50*67e74705SXin Li template<typename T, unsigned N> struct SmallVector : SmallVectorImpl<T> { 51*67e74705SXin Li // trivial dtor 52*67e74705SXin Li }; 53*67e74705SXin Li template<unsigned N> struct SmallString : SmallVector<char, N> { 54*67e74705SXin Li // trivial dtor 55*67e74705SXin Li }; 56*67e74705SXin Li } 57*67e74705SXin Li 58*67e74705SXin Li template<typename T> struct WithUndefinedStaticDataMember { 59*67e74705SXin Li static T undefined; 60*67e74705SXin Li }; 61