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