]>
Commit | Line | Data |
---|---|---|
8af2fec4 RY |
1 | // I, Howard Hinnant, hereby place this code in the public domain. |
2 | ||
e7f1930f | 3 | // Test overload resolution among reference types |
8af2fec4 | 4 | |
4b2e63de | 5 | // { dg-do compile { target c++11 } } |
8af2fec4 RY |
6 | |
7 | template <bool> struct sa; | |
8 | template <> struct sa<true> {}; | |
9 | ||
10 | struct one {char x[1];}; | |
11 | struct two {char x[2];}; | |
12 | struct three {char x[3];}; | |
13 | struct four {char x[4];}; | |
14 | struct five {char x[5];}; | |
15 | struct six {char x[6];}; | |
16 | struct seven {char x[7];}; | |
17 | struct eight {char x[8];}; | |
18 | ||
19 | struct A | |
20 | { | |
21 | A(); | |
a2e70335 | 22 | A(const volatile A&&); |
8af2fec4 RY |
23 | }; |
24 | ||
25 | A source(); | |
26 | const A c_source(); | |
27 | volatile A v_source(); | |
28 | const volatile A cv_source(); | |
29 | ||
30 | // 1 at a time | |
31 | ||
7abebba7 | 32 | one sink_1_1( A&); // { dg-message "" } |
8af2fec4 RY |
33 | |
34 | int test1_1() | |
35 | { | |
36 | A a; | |
a2e70335 | 37 | const A ca = a; // { dg-error "deleted" } |
8af2fec4 | 38 | volatile A va; |
a2e70335 | 39 | const volatile A cva = a; // { dg-error "deleted" } |
89606913 JM |
40 | sink_1_1(ca); // { dg-error "" } |
41 | sink_1_1(va); // { dg-error "" } | |
42 | sink_1_1(cva); // { dg-error "" } | |
43 | sink_1_1(source()); // { dg-error "" } | |
44 | sink_1_1(c_source()); // { dg-error "" } | |
45 | sink_1_1(v_source()); // { dg-error "" } | |
46 | sink_1_1(cv_source()); // { dg-error "" } | |
8af2fec4 RY |
47 | return 0; |
48 | } | |
49 | ||
7abebba7 | 50 | two sink_1_2(const A&); // { dg-message "" } |
8af2fec4 RY |
51 | |
52 | int test1_2() | |
53 | { | |
54 | A a; | |
a2e70335 | 55 | const A ca = a; // { dg-error "deleted" } |
8af2fec4 | 56 | volatile A va; |
a2e70335 | 57 | const volatile A cva = a; // { dg-error "deleted" } |
89606913 JM |
58 | sink_1_2(va); // { dg-error "" } |
59 | sink_1_2(cva); // { dg-error "" } | |
60 | sink_1_2(v_source()); // { dg-error "" } | |
61 | sink_1_2(cv_source()); // { dg-error "" } | |
8af2fec4 RY |
62 | return 0; |
63 | } | |
64 | ||
7abebba7 | 65 | three sink_1_3(volatile A&); // { dg-message "" } |
8af2fec4 RY |
66 | |
67 | int test1_3() | |
68 | { | |
69 | A a; | |
a2e70335 | 70 | const A ca = a; // { dg-error "deleted" } |
8af2fec4 | 71 | volatile A va; |
a2e70335 | 72 | const volatile A cva = a; // { dg-error "deleted" } |
89606913 JM |
73 | sink_1_3(ca); // { dg-error "" } |
74 | sink_1_3(cva); // { dg-error "" } | |
75 | sink_1_3(source()); // { dg-error "" } | |
76 | sink_1_3(c_source()); // { dg-error "" } | |
77 | sink_1_3(v_source()); // { dg-error "" } | |
78 | sink_1_3(cv_source()); // { dg-error "" } | |
8af2fec4 RY |
79 | return 0; |
80 | } | |
81 | ||
7abebba7 | 82 | four sink_1_4(const volatile A&); // { dg-message "" } |
8af2fec4 RY |
83 | |
84 | int test1_4() | |
85 | { | |
86 | A a; | |
a2e70335 | 87 | const A ca = a; // { dg-error "deleted" } |
8af2fec4 | 88 | volatile A va; |
a2e70335 | 89 | const volatile A cva = a; // { dg-error "deleted" } |
89606913 JM |
90 | sink_1_4(source()); // { dg-error "" } |
91 | sink_1_4(c_source()); // { dg-error "" } | |
92 | sink_1_4(v_source()); // { dg-error "" } | |
93 | sink_1_4(cv_source()); // { dg-error "" } | |
8af2fec4 RY |
94 | return 0; |
95 | } | |
96 | ||
7abebba7 | 97 | five sink_1_5( A&&); // { dg-message "" } |
8af2fec4 RY |
98 | |
99 | int test1_5() | |
100 | { | |
101 | A a; | |
a2e70335 | 102 | const A ca = a; // { dg-error "deleted" } |
8af2fec4 | 103 | volatile A va; |
a2e70335 | 104 | const volatile A cva = a; // { dg-error "deleted" } |
e7f1930f | 105 | sink_1_5(a); // { dg-error "lvalue" } |
89606913 JM |
106 | sink_1_5(ca); // { dg-error "" } |
107 | sink_1_5(va); // { dg-error "" } | |
108 | sink_1_5(cva); // { dg-error "" } | |
109 | sink_1_5(c_source()); // { dg-error "" } | |
110 | sink_1_5(v_source()); // { dg-error "" } | |
111 | sink_1_5(cv_source()); // { dg-error "" } | |
8af2fec4 RY |
112 | return 0; |
113 | } | |
114 | ||
7abebba7 | 115 | six sink_1_6(const A&&); // { dg-message "" } |
8af2fec4 RY |
116 | |
117 | int test1_6() | |
118 | { | |
119 | A a; | |
a2e70335 | 120 | const A ca = a; // { dg-error "deleted" } |
8af2fec4 | 121 | volatile A va; |
a2e70335 | 122 | const volatile A cva = a; // { dg-error "deleted" } |
e7f1930f JM |
123 | sink_1_6(a); // { dg-error "lvalue" } |
124 | sink_1_6(ca); // { dg-error "lvalue" } | |
89606913 JM |
125 | sink_1_6(va); // { dg-error "" } |
126 | sink_1_6(cva); // { dg-error "" } | |
127 | sink_1_6(v_source()); // { dg-error "" } | |
128 | sink_1_6(cv_source()); // { dg-error "" } | |
8af2fec4 RY |
129 | return 0; |
130 | } | |
131 | ||
7abebba7 | 132 | seven sink_1_7(volatile A&&); // { dg-message "" } |
8af2fec4 RY |
133 | |
134 | int test1_7() | |
135 | { | |
136 | A a; | |
a2e70335 | 137 | const A ca = a; // { dg-error "deleted" } |
8af2fec4 | 138 | volatile A va; |
a2e70335 | 139 | const volatile A cva = a; // { dg-error "deleted" } |
e7f1930f | 140 | sink_1_7(a); // { dg-error "lvalue" } |
89606913 | 141 | sink_1_7(ca); // { dg-error "" } |
e7f1930f | 142 | sink_1_7(va); // { dg-error "lvalue" } |
89606913 JM |
143 | sink_1_7(cva); // { dg-error "" } |
144 | sink_1_7(c_source()); // { dg-error "" } | |
145 | sink_1_7(cv_source()); // { dg-error "" } | |
8af2fec4 RY |
146 | return 0; |
147 | } | |
148 | ||
7abebba7 | 149 | eight sink_1_8(const volatile A&&); // { dg-message "" } |
e7f1930f JM |
150 | |
151 | int test1_8() | |
152 | { | |
153 | A a; | |
a2e70335 | 154 | const A ca = a; // { dg-error "deleted" } |
e7f1930f | 155 | volatile A va; |
a2e70335 | 156 | const volatile A cva = a; // { dg-error "deleted" } |
e7f1930f JM |
157 | sink_1_8(a); // { dg-error "lvalue" } |
158 | sink_1_8(ca); // { dg-error "lvalue" } | |
159 | sink_1_8(va); // { dg-error "lvalue" } | |
160 | sink_1_8(cva); // { dg-error "lvalue" } | |
161 | return 0; | |
162 | } | |
163 | ||
8af2fec4 RY |
164 | int main() |
165 | { | |
166 | return test1_1() + test1_2() + test1_3() + test1_5() + | |
167 | test1_6() + test1_7(); | |
168 | } |