3 template<typename T
> class Vector
;
5 template<typename T
> class Vector
;
7 template<typename T
> class List
;
8 template<> class List
<bool> {
13 template<typename T
> class Set
;
16 template<typename T
> class Set
{
22 constexpr unsigned List
<int>::*size_left
= &List
<int>::size
;
23 List
<int> list_left
= { 0, 8 };
24 typedef List
<int> ListInt_left
;
27 void pendingInstantiationEmit(T
) {}
28 void triggerPendingInstantiation() {
29 pendingInstantiationEmit(12);
30 pendingInstantiationEmit(42.);
33 void redeclDefinitionEmit(){}
35 typedef Outer
<int>::Inner OuterIntInner_left
;
37 int defineListDoubleLeft() {
43 template<typename T
> struct MergePatternDecl
;
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>;
50 void useExplicitInstantiation() {
51 ExplicitInstantiation
<true, false>().f();
52 ExplicitInstantiation
<true, true>().f();
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) {}
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
);
64 namespace EmitDefaultedSpecialMembers
{
70 inline int *getStaticDataMemberLeft() {
71 return WithUndefinedStaticDataMember
<int[]>::undefined
;
74 inline WithAttributes
<int> make_with_attributes_left() { return WithAttributes
<int>(); }