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