107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch@import templates_top;
207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochtemplate<typename T> class Vector {
407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochpublic:
507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch  void push_back(const T&);
607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch};
707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochtemplate<typename T> class List;
9c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)template<> class List<bool> {
1007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochpublic:
1107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch  void push_back(int);
1207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch};
13c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
14namespace N {
15  template<typename T> class Set {
16  public:
17    void insert(T);
18  };
19}
20
21constexpr unsigned List<int>::*size_right = &List<int>::size;
22List<int> list_right = { 0, 12 };
23typedef List<int> ListInt_right;
24
25template <typename T>
26void pendingInstantiationEmit(T) {}
27void triggerPendingInstantiationToo() {
28  pendingInstantiationEmit(12);
29}
30
31void redeclDefinitionEmit(){}
32
33typedef Outer<int>::Inner OuterIntInner_right;
34
35int defineListDoubleRight() {
36  List<double> ld;
37  ld.push_back(0.0);
38  return ld.size;
39}
40
41template<typename T> struct MergePatternDecl;
42
43void outOfLineInlineUseRightF(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::f);
44void outOfLineInlineUseRightG(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::g);
45void outOfLineInlineUseRightH(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::h);
46