1c50d4924SDouglas Gregor @import templates_top; 263469422SAxel Naumann 363469422SAxel Naumann template<typename T> class Vector { 463469422SAxel Naumann public: 563469422SAxel Naumann void push_back(const T&); 663469422SAxel Naumann }; 763469422SAxel Naumann 863469422SAxel Naumann template<typename T> class List; 963469422SAxel Naumann template<> class List<bool> { 1063469422SAxel Naumann public: 1163469422SAxel Naumann void push_back(int); 1263469422SAxel Naumann }; 1363469422SAxel Naumann 1463469422SAxel Naumann namespace N { 1563469422SAxel Naumann template<typename T> class Set { 1663469422SAxel Naumann public: 1763469422SAxel Naumann void insert(T); 1863469422SAxel Naumann }; 1963469422SAxel Naumann } 2063469422SAxel Naumann 210b87e073SRichard Smith constexpr unsigned List<int>::*size_right = &List<int>::size; 220b87e073SRichard Smith List<int> list_right = { 0, 12 }; 230b87e073SRichard Smith typedef List<int> ListInt_right; 240b87e073SRichard Smith 2563469422SAxel Naumann template <typename T> pendingInstantiationEmit(T)26d9a25b3cSAxel Naumannvoid pendingInstantiationEmit(T) {} triggerPendingInstantiationToo()2763469422SAxel Naumannvoid triggerPendingInstantiationToo() { 28d9a25b3cSAxel Naumann pendingInstantiationEmit(12); 2963469422SAxel Naumann } 30d9a25b3cSAxel Naumann redeclDefinitionEmit()31d9a25b3cSAxel Naumannvoid redeclDefinitionEmit(){} 32d55889a6SRichard Smith 33d55889a6SRichard Smith typedef Outer<int>::Inner OuterIntInner_right; 34cd45dbc5SRichard Smith defineListDoubleRight()35cd45dbc5SRichard Smithint defineListDoubleRight() { 36cd45dbc5SRichard Smith List<double> ld; 37cd45dbc5SRichard Smith ld.push_back(0.0); 38cd45dbc5SRichard Smith return ld.size; 39cd45dbc5SRichard Smith } 40f17fdbd7SRichard Smith defineListLongRight()419c9173dcSRichard Smithinline void defineListLongRight() { 429c9173dcSRichard Smith List<long> ll; 439c9173dcSRichard Smith } 449c9173dcSRichard Smith 45f17fdbd7SRichard Smith template<typename T> struct MergePatternDecl; 46195d8ef4SRichard Smith 47195d8ef4SRichard Smith void outOfLineInlineUseRightF(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::f); 48195d8ef4SRichard Smith void outOfLineInlineUseRightG(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::g); 49195d8ef4SRichard Smith void outOfLineInlineUseRightH(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::h); 5073b21d8fSRichard Smith getStaticDataMemberRight()5173b21d8fSRichard Smithinline int *getStaticDataMemberRight() { 5273b21d8fSRichard Smith return WithUndefinedStaticDataMember<int[]>::undefined; 5373b21d8fSRichard Smith } 54*842e46e6SRichard Smith make_with_attributes_right()55*842e46e6SRichard Smithinline WithAttributes<int> make_with_attributes_right() { return WithAttributes<int>(); } 56