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 extern List<long> *instantiateListLongDeclaration; 14 15 namespace A { 16 class Y { 17 template <typename T> friend class WhereAmI; 18 }; 19 } 20 21 template <typename T> class A::WhereAmI { 22 public: 23 static void func() {} 24 }; 25 26 template<typename T> struct Outer { 27 struct Inner {}; 28 }; 29 30 template<bool, bool> struct ExplicitInstantiation { 31 void f() {} 32 }; 33 34 template<typename> struct DelayUpdates {}; 35 36 template<typename T> struct OutOfLineInline { 37 void f(); 38 void g(); 39 void h(); 40 }; 41 template<typename T> inline void OutOfLineInline<T>::f() {} 42 template<typename T> inline void OutOfLineInline<T>::g() {} 43 template<typename T> inline void OutOfLineInline<T>::h() {} 44 45 namespace EmitDefaultedSpecialMembers { 46 template<typename T> struct SmallVectorImpl { 47 SmallVectorImpl() {} 48 ~SmallVectorImpl() {} // non-trivial dtor 49 }; 50 template<typename T, unsigned N> struct SmallVector : SmallVectorImpl<T> { 51 // trivial dtor 52 }; 53 template<unsigned N> struct SmallString : SmallVector<char, N> { 54 // trivial dtor 55 }; 56 } 57 58 template<typename T> struct WithUndefinedStaticDataMember { 59 static T undefined; 60 }; 61