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