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