1@import templates_top;
2
3template<typename T> class Vector;
4
5template<typename T> class Vector;
6
7template<typename T> class List;
8template<> class List<bool> {
9public:
10  void push_back(int);
11};
12namespace N {
13  template<typename T> class Set;
14}
15namespace N {
16  template<typename T> class Set {
17  public:
18    void insert(T);
19  };
20}
21
22constexpr unsigned List<int>::*size_left = &List<int>::size;
23List<int> list_left = { 0, 8 };
24typedef List<int> ListInt_left;
25
26template <typename T>
27void pendingInstantiationEmit(T) {}
28void triggerPendingInstantiation() {
29  pendingInstantiationEmit(12);
30  pendingInstantiationEmit(42.);
31}
32
33void redeclDefinitionEmit(){}
34
35typedef Outer<int>::Inner OuterIntInner_left;
36
37int defineListDoubleLeft() {
38  List<double> ld;
39  ld.push_back(0.0);
40  return ld.size;
41}
42
43template<typename T> struct MergePatternDecl;
44
45extern template struct ExplicitInstantiation<false, false>;
46extern template struct ExplicitInstantiation<false, true>;
47extern template struct ExplicitInstantiation<true, false>;
48extern template struct ExplicitInstantiation<true, true>;
49
50void useExplicitInstantiation() {
51  ExplicitInstantiation<true, false>().f();
52  ExplicitInstantiation<true, true>().f();
53}
54
55template<typename> struct DelayUpdates;
56template<> struct DelayUpdates<int>;
57template<typename T> struct DelayUpdates<T*>;
58template<typename T> void testDelayUpdates(DelayUpdates<T> *p = 0) {}
59
60void outOfLineInlineUseLeftF(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::f);
61void outOfLineInlineUseLeftG(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::g);
62void outOfLineInlineUseLeftH(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::h);
63