1 @import templates_top; 2 3 template<typename T> class Vector { 4 public: 5 void push_back(const T&); 6 }; 7 8 template<typename T> class List; 9 template<> class List<bool> { 10 public: 11 void push_back(int); 12 }; 13 14 namespace N { 15 template<typename T> class Set { 16 public: 17 void insert(T); 18 }; 19 } 20 21 constexpr unsigned List<int>::*size_right = &List<int>::size; 22 List<int> list_right = { 0, 12 }; 23 typedef List<int> ListInt_right; 24 25 template <typename T> pendingInstantiationEmit(T)26void pendingInstantiationEmit(T) {} triggerPendingInstantiationToo()27void triggerPendingInstantiationToo() { 28 pendingInstantiationEmit(12); 29 } 30 redeclDefinitionEmit()31void redeclDefinitionEmit(){} 32 33 typedef Outer<int>::Inner OuterIntInner_right; 34 defineListDoubleRight()35int defineListDoubleRight() { 36 List<double> ld; 37 ld.push_back(0.0); 38 return ld.size; 39 } 40 defineListLongRight()41inline void defineListLongRight() { 42 List<long> ll; 43 } 44 45 template<typename T> struct MergePatternDecl; 46 47 void outOfLineInlineUseRightF(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::f); 48 void outOfLineInlineUseRightG(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::g); 49 void outOfLineInlineUseRightH(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::h); 50 getStaticDataMemberRight()51inline int *getStaticDataMemberRight() { 52 return WithUndefinedStaticDataMember<int[]>::undefined; 53 } 54