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