template class Vector; template class List { public: void push_back(T); struct node {}; node *head; unsigned size; }; extern List *instantiateListDoubleDeclaration; extern List *instantiateListLongDeclaration; namespace A { class Y { template friend class WhereAmI; }; } template class A::WhereAmI { public: static void func() {} }; template struct Outer { struct Inner {}; }; template struct ExplicitInstantiation { void f() {} }; template struct DelayUpdates {}; template struct OutOfLineInline { void f(); void g(); void h(); }; template inline void OutOfLineInline::f() {} template inline void OutOfLineInline::g() {} template inline void OutOfLineInline::h() {} namespace EmitDefaultedSpecialMembers { template struct SmallVectorImpl { SmallVectorImpl() {} ~SmallVectorImpl() {} // non-trivial dtor }; template struct SmallVector : SmallVectorImpl { // trivial dtor }; template struct SmallString : SmallVector { // trivial dtor }; } template struct WithUndefinedStaticDataMember { static T undefined; };