11b257afbae854c6817f26b7d61c4fed8ff7aebadDouglas Gregor@import templates_top; 239d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumann 339d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumanntemplate<typename T> class Vector; 439d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumann 539d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumanntemplate<typename T> class Vector; 639d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumann 739d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumanntemplate<typename T> class List; 839d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumanntemplate<> class List<bool> { 939d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumannpublic: 1039d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumann void push_back(int); 1139d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumann}; 1239d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumannnamespace N { 1339d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumann template<typename T> class Set; 1439d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumann} 1539d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumannnamespace N { 1639d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumann template<typename T> class Set { 1739d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumann public: 1839d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumann void insert(T); 1939d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumann }; 2039d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumann} 2139d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumann 224ed0122c1b795379cc4e11dfd62312358dcbf506Richard Smithconstexpr unsigned List<int>::*size_left = &List<int>::size; 234ed0122c1b795379cc4e11dfd62312358dcbf506Richard SmithList<int> list_left = { 0, 8 }; 244ed0122c1b795379cc4e11dfd62312358dcbf506Richard Smithtypedef List<int> ListInt_left; 254ed0122c1b795379cc4e11dfd62312358dcbf506Richard Smith 2639d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumanntemplate <typename T> 2738c3bb40c2cef630c236f3f455ea98999990b8eeAxel Naumannvoid pendingInstantiationEmit(T) {} 2839d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumannvoid triggerPendingInstantiation() { 2938c3bb40c2cef630c236f3f455ea98999990b8eeAxel Naumann pendingInstantiationEmit(12); 3038c3bb40c2cef630c236f3f455ea98999990b8eeAxel Naumann pendingInstantiationEmit(42.); 3139d26c3e499470cd80a3e6f26f11ac681cd9712cAxel Naumann} 3238c3bb40c2cef630c236f3f455ea98999990b8eeAxel Naumann 3338c3bb40c2cef630c236f3f455ea98999990b8eeAxel Naumannvoid redeclDefinitionEmit(){} 34b60fae50d38a0291e1c5731b2fb22849d26ca342Richard Smith 35b60fae50d38a0291e1c5731b2fb22849d26ca342Richard Smithtypedef Outer<int>::Inner OuterIntInner_left; 366bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 376bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint defineListDoubleLeft() { 386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines List<double> ld; 396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines ld.push_back(0.0); 406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return ld.size; 416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 426bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinestemplate<typename T> struct MergePatternDecl; 446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesextern template struct ExplicitInstantiation<false, false>; 466bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesextern template struct ExplicitInstantiation<false, true>; 476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesextern template struct ExplicitInstantiation<true, false>; 486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesextern template struct ExplicitInstantiation<true, true>; 496bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 506bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid useExplicitInstantiation() { 516bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines ExplicitInstantiation<true, false>().f(); 526bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines ExplicitInstantiation<true, true>().f(); 536bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 546bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 556bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinestemplate<typename> struct DelayUpdates; 566bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinestemplate<> struct DelayUpdates<int>; 576bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinestemplate<typename T> struct DelayUpdates<T*>; 586bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinestemplate<typename T> void testDelayUpdates(DelayUpdates<T> *p = 0) {} 59c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 60c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesvoid outOfLineInlineUseLeftF(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::f); 61c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesvoid outOfLineInlineUseLeftG(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::g); 62c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesvoid outOfLineInlineUseLeftH(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::h); 63176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 64176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesnamespace EmitDefaultedSpecialMembers { 65176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines inline void f() { 66176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines SmallString<256> SS; 67176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines }; 68176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 69176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 70176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesinline int *getStaticDataMemberLeft() { 71176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return WithUndefinedStaticDataMember<int[]>::undefined; 72176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 73