1 template<typename T> class Vector;
2 
3 template<typename T> class List {
4 public:
5   void push_back(T);
6 
7   struct node {};
8   node *head;
9   unsigned size;
10 };
11 
12 extern List<double> *instantiateListDoubleDeclaration;
13 
14 namespace A {
15   class Y {
16     template <typename T> friend class WhereAmI;
17   };
18 }
19 
20 template <typename T> class A::WhereAmI {
21 public:
22   static void func() {}
23 };
24 
25 template<typename T> struct Outer {
26   struct Inner {};
27 };
28 
29 template<bool, bool> struct ExplicitInstantiation {
30   void f() {}
31 };
32 
33 template<typename> struct DelayUpdates {};
34 
35 template<typename T> struct OutOfLineInline {
36   void f();
37   void g();
38   void h();
39 };
40 template<typename T> inline void OutOfLineInline<T>::f() {}
41 template<typename T> inline void OutOfLineInline<T>::g() {}
42 template<typename T> inline void OutOfLineInline<T>::h() {}
43 
44 namespace EmitDefaultedSpecialMembers {
45   template<typename T> struct SmallVectorImpl {
46     SmallVectorImpl() {}
47     ~SmallVectorImpl() {} // non-trivial dtor
48   };
49   template<typename T, unsigned N> struct SmallVector : SmallVectorImpl<T> {
50     // trivial dtor
51   };
52   template<unsigned N> struct SmallString : SmallVector<char, N> {
53     // trivial dtor
54   };
55 }
56 
57 template<typename T> struct WithUndefinedStaticDataMember {
58   static T undefined;
59 };
60