1 @import templates_top; 2 3 template<typename T> class Vector; 4 5 template<typename T> class Vector; 6 7 template<typename T> class List; 8 template<> class List<bool> { 9 public: 10 void push_back(int); 11 }; 12 namespace N { 13 template<typename T> class Set; 14 } 15 namespace N { 16 template<typename T> class Set { 17 public: 18 void insert(T); 19 }; 20 } 21 22 constexpr unsigned List<int>::*size_left = &List<int>::size; 23 List<int> list_left = { 0, 8 }; 24 typedef List<int> ListInt_left; 25 26 template <typename T> 27 void pendingInstantiationEmit(T) {} 28 void triggerPendingInstantiation() { 29 pendingInstantiationEmit(12); 30 pendingInstantiationEmit(42.); 31 } 32 33 void redeclDefinitionEmit(){} 34 35 typedef Outer<int>::Inner OuterIntInner_left; 36 37 int defineListDoubleLeft() { 38 List<double> ld; 39 ld.push_back(0.0); 40 return ld.size; 41 } 42 43 template<typename T> struct MergePatternDecl; 44 45 extern template struct ExplicitInstantiation<false, false>; 46 extern template struct ExplicitInstantiation<false, true>; 47 extern template struct ExplicitInstantiation<true, false>; 48 extern template struct ExplicitInstantiation<true, true>; 49 50 void useExplicitInstantiation() { 51 ExplicitInstantiation<true, false>().f(); 52 ExplicitInstantiation<true, true>().f(); 53 } 54 55 template<typename> struct DelayUpdates; 56 template<> struct DelayUpdates<int>; 57 template<typename T> struct DelayUpdates<T*>; 58 template<typename T> void testDelayUpdates(DelayUpdates<T> *p = 0) {} 59 60 void outOfLineInlineUseLeftF(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::f); 61 void outOfLineInlineUseLeftG(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::g); 62 void outOfLineInlineUseLeftH(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::h); 63 64 namespace EmitDefaultedSpecialMembers { 65 inline void f() { 66 SmallString<256> SS; 67 }; 68 } 69 70 inline int *getStaticDataMemberLeft() { 71 return WithUndefinedStaticDataMember<int[]>::undefined; 72 } 73