1template<typename T> class Vector;
2
3template<typename T> class List {
4public:
5  void push_back(T);
6
7  struct node {};
8  node *head;
9  unsigned size;
10};
11
12extern List<double> *instantiateListDoubleDeclaration;
13
14namespace A {
15  class Y {
16    template <typename T> friend class WhereAmI;
17  };
18}
19
20template <typename T> class A::WhereAmI {
21public:
22  static void func() {}
23};
24
25template<typename T> struct Outer {
26  struct Inner {};
27};
28
29template<bool, bool> struct ExplicitInstantiation {
30  void f() {}
31};
32
33template<typename> struct DelayUpdates {};
34
35template<typename T> struct OutOfLineInline {
36  void f();
37  void g();
38  void h();
39};
40template<typename T> inline void OutOfLineInline<T>::f() {}
41template<typename T> inline void OutOfLineInline<T>::g() {}
42template<typename T> inline void OutOfLineInline<T>::h() {}
43
44namespace 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
57template<typename T> struct WithUndefinedStaticDataMember {
58  static T undefined;
59};
60