Merged revisions 195034,195219,195245,195357,195374,195428,195599,195673,195809 via...
[official-gcc.git] / main / libstdc++-v3 / testsuite / 20_util / is_assignable / value.cc
blobeade406593dbf2fbc61c6685787559b4ca4451dd
1 // { dg-options "-std=gnu++0x" }
2 // { dg-do compile }
4 // Copyright (C) 2011-2013 Free Software Foundation, Inc.
5 //
6 // This file is part of the GNU ISO C++ Library. This library is free
7 // software; you can redistribute it and/or modify it under the
8 // terms of the GNU General Public License as published by the
9 // Free Software Foundation; either version 3, or (at your option)
10 // any later version.
12 // This library is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
17 // You should have received a copy of the GNU General Public License along
18 // with this library; see the file COPYING3. If not see
19 // <http://www.gnu.org/licenses/>.
21 #include <type_traits>
22 #include <initializer_list>
23 #include <testsuite_tr1.h>
25 using namespace __gnu_test::assign;
27 static_assert(std::is_assignable<int&, int>::value, "Error");
28 static_assert(std::is_assignable<int&, const int>::value, "Error");
29 static_assert(std::is_assignable<int&, int&>::value, "Error");
30 static_assert(std::is_assignable<int&, const int&>::value, "Error");
32 static_assert(!std::is_assignable<int, int>::value, "Error");
33 static_assert(!std::is_assignable<int, const int>::value, "Error");
34 static_assert(!std::is_assignable<int, int&>::value, "Error");
35 static_assert(!std::is_assignable<int, const int&>::value, "Error");
37 static_assert(!std::is_assignable<const int, int>::value, "Error");
38 static_assert(!std::is_assignable<const int, const int>::value, "Error");
39 static_assert(!std::is_assignable<const int, int&>::value, "Error");
40 static_assert(!std::is_assignable<const int, const int&>::value, "Error");
42 static_assert(!std::is_assignable<const int&, int>::value, "Error");
43 static_assert(!std::is_assignable<const int&, const int>::value, "Error");
44 static_assert(!std::is_assignable<const int&, int&>::value, "Error");
45 static_assert(!std::is_assignable<const int&, const int&>::value, "Error");
47 static_assert(std::is_assignable<Empty&, Empty>::value, "Error");
48 static_assert(std::is_assignable<Empty&, const Empty>::value, "Error");
49 static_assert(std::is_assignable<Empty&, Empty&>::value, "Error");
50 static_assert(std::is_assignable<Empty&, const Empty&>::value, "Error");
51 static_assert(std::is_assignable<Empty, Empty>::value, "Error");
52 static_assert(std::is_assignable<Empty, const Empty>::value, "Error");
53 static_assert(std::is_assignable<Empty, Empty&>::value, "Error");
54 static_assert(std::is_assignable<Empty, const Empty&>::value, "Error");
56 static_assert(std::is_assignable<B&, B>::value, "Error");
57 static_assert(std::is_assignable<B&, const B>::value, "Error");
58 static_assert(std::is_assignable<B&, B&>::value, "Error");
59 static_assert(std::is_assignable<B&, const B&>::value, "Error");
60 static_assert(std::is_assignable<B, B>::value, "Error");
61 static_assert(std::is_assignable<B, const B>::value, "Error");
62 static_assert(std::is_assignable<B, B&>::value, "Error");
63 static_assert(std::is_assignable<B, const B&>::value, "Error");
65 static_assert(std::is_assignable<bool&, bool>::value, "Error");
66 static_assert(std::is_assignable<bool&, const bool>::value, "Error");
67 static_assert(std::is_assignable<bool&, bool&>::value, "Error");
68 static_assert(std::is_assignable<bool&, const bool&>::value, "Error");
70 // bool is a fundamental type that does not allow assignment to an rvalue:
71 static_assert(!std::is_assignable<bool, bool>::value, "Error");
72 static_assert(!std::is_assignable<bool, const bool>::value, "Error");
73 static_assert(!std::is_assignable<bool, bool&>::value, "Error");
74 static_assert(!std::is_assignable<bool, const bool&>::value, "Error");
76 static_assert(std::is_assignable<std::nullptr_t&,
77 std::nullptr_t>::value, "Error");
78 static_assert(std::is_assignable<std::nullptr_t&, const
79 std::nullptr_t>::value, "Error");
80 static_assert(std::is_assignable<std::nullptr_t&,
81 std::nullptr_t&>::value, "Error");
82 static_assert(std::is_assignable<std::nullptr_t&, const
83 std::nullptr_t&>::value, "Error");
85 // std::nullptr_t is a fundamental type that does not allow
86 // assignment to an rvalue:
87 static_assert(!std::is_assignable<std::nullptr_t,
88 std::nullptr_t>::value, "Error");
89 static_assert(!std::is_assignable<std::nullptr_t, const
90 std::nullptr_t>::value, "Error");
91 static_assert(!std::is_assignable<std::nullptr_t,
92 std::nullptr_t&>::value, "Error");
93 static_assert(!std::is_assignable<std::nullptr_t, const
94 std::nullptr_t&>::value, "Error");
96 static_assert(std::is_assignable<E&, E>::value, "Error");
97 static_assert(std::is_assignable<E&, const E>::value, "Error");
98 static_assert(std::is_assignable<E&, E&>::value, "Error");
99 static_assert(std::is_assignable<E&, const E&>::value, "Error");
101 static_assert(std::is_assignable<int&, E>::value, "Error");
102 static_assert(std::is_assignable<int&, const E>::value, "Error");
103 static_assert(std::is_assignable<int&, E&>::value, "Error");
104 static_assert(std::is_assignable<int&, const E&>::value, "Error");
106 static_assert(!std::is_assignable<E&, int>::value, "Error");
107 static_assert(!std::is_assignable<E&, const int>::value, "Error");
108 static_assert(!std::is_assignable<E&, int&>::value, "Error");
109 static_assert(!std::is_assignable<E&, const int&>::value, "Error");
111 static_assert(!std::is_assignable<E&, E2>::value, "Error");
112 static_assert(!std::is_assignable<E&, const E2>::value, "Error");
113 static_assert(!std::is_assignable<E&, E2&>::value, "Error");
114 static_assert(!std::is_assignable<E&, const E2&>::value, "Error");
116 // E is not a class type and thus does not allow assignment to an rvalue:
117 static_assert(!std::is_assignable<E, E>::value, "Error");
118 static_assert(!std::is_assignable<E, const E>::value, "Error");
119 static_assert(!std::is_assignable<E, E&>::value, "Error");
120 static_assert(!std::is_assignable<E, const E&>::value, "Error");
122 static_assert(std::is_assignable<SE&, SE>::value, "Error");
123 static_assert(std::is_assignable<SE&, const SE>::value, "Error");
124 static_assert(std::is_assignable<SE&, SE&>::value, "Error");
125 static_assert(std::is_assignable<SE&, const SE&>::value, "Error");
127 static_assert(!std::is_assignable<int&, SE>::value, "Error");
128 static_assert(!std::is_assignable<int&, const SE>::value, "Error");
129 static_assert(!std::is_assignable<int&, SE&>::value, "Error");
130 static_assert(!std::is_assignable<int&, const SE&>::value, "Error");
132 static_assert(!std::is_assignable<SE&, int>::value, "Error");
133 static_assert(!std::is_assignable<SE&, const int>::value, "Error");
134 static_assert(!std::is_assignable<SE&, int&>::value, "Error");
135 static_assert(!std::is_assignable<SE&, const int&>::value, "Error");
137 // SE is not a class type and thus does not allow assignment to an rvalue:
138 static_assert(!std::is_assignable<SE, SE>::value, "Error");
139 static_assert(!std::is_assignable<SE, const SE>::value, "Error");
140 static_assert(!std::is_assignable<SE, SE&>::value, "Error");
141 static_assert(!std::is_assignable<SE, const SE&>::value, "Error");
143 static_assert(std::is_assignable<AnyAssign&, int>::value, "Error");
144 static_assert(std::is_assignable<AnyAssign&, std::nullptr_t>::value, "Error");
145 static_assert(std::is_assignable<AnyAssign&, E>::value, "Error");
146 static_assert(std::is_assignable<AnyAssign&, SE>::value, "Error");
147 static_assert(std::is_assignable<AnyAssign&, Empty>::value, "Error");
148 static_assert(std::is_assignable<AnyAssign&, U>::value, "Error");
149 static_assert(std::is_assignable<AnyAssign&, int&>::value, "Error");
150 static_assert(std::is_assignable<AnyAssign&, std::nullptr_t&>::value, "Error");
151 static_assert(std::is_assignable<AnyAssign&, E&>::value, "Error");
152 static_assert(std::is_assignable<AnyAssign&, SE&>::value, "Error");
153 static_assert(std::is_assignable<AnyAssign&, Empty&>::value, "Error");
154 static_assert(std::is_assignable<AnyAssign&, U&>::value, "Error");
155 static_assert(std::is_assignable<AnyAssign&, AnyAssign>::value, "Error");
156 static_assert(std::is_assignable<AnyAssign&,
157 std::initializer_list<int>>::value, "Error");
159 static_assert(std::is_assignable<AnyAssign&, int[1]>::value, "Error");
160 static_assert(std::is_assignable<AnyAssign&,
161 std::nullptr_t[1]>::value, "Error");
162 static_assert(std::is_assignable<AnyAssign&, E[1]>::value, "Error");
163 static_assert(std::is_assignable<AnyAssign&, SE[1]>::value, "Error");
164 static_assert(std::is_assignable<AnyAssign&, int(&)[1]>::value, "Error");
165 static_assert(std::is_assignable<AnyAssign&,
166 std::nullptr_t(&)[1]>::value, "Error");
167 static_assert(std::is_assignable<AnyAssign&, E(&)[1]>::value, "Error");
168 static_assert(std::is_assignable<AnyAssign&, SE(&)[1]>::value, "Error");
170 static_assert(std::is_assignable<int&, E>::value, "Error");
171 static_assert(!std::is_assignable<int&, SE>::value, "Error");
172 static_assert(std::is_assignable<bool&, E>::value, "Error");
173 static_assert(!std::is_assignable<bool&, SE>::value, "Error");
174 static_assert(std::is_assignable<bool&, void*>::value, "Error");
175 static_assert(std::is_assignable<bool&, int B::*>::value, "Error");
176 static_assert(std::is_assignable<bool&, void*>::value, "Error");
177 static_assert(std::is_assignable<bool&, std::nullptr_t>::value, "Error");
179 static_assert(std::is_assignable<std::nullptr_t&,
180 std::nullptr_t>::value, "Error");
181 static_assert(std::is_assignable<void*&, std::nullptr_t>::value, "Error");
182 static_assert(std::is_assignable<int*&, std::nullptr_t>::value, "Error");
183 static_assert(std::is_assignable<int B::*&, std::nullptr_t>::value, "Error");
184 static_assert(!std::is_assignable<std::nullptr_t&, bool>::value, "Error");
185 static_assert(!std::is_assignable<void*&, bool>::value, "Error");
186 static_assert(!std::is_assignable<E&, bool>::value, "Error");
187 static_assert(!std::is_assignable<SE&, bool>::value, "Error");
189 static_assert(std::is_assignable<std::initializer_list<int>&,
190 std::initializer_list<int>>::value, "Error");
191 static_assert(std::is_assignable<std::initializer_list<int>&,
192 std::initializer_list<int>&&>::value, "Error");
193 static_assert(std::is_assignable<std::initializer_list<int>&, const
194 std::initializer_list<int>&&>::value, "Error");
195 static_assert(std::is_assignable<std::initializer_list<int>&,
196 std::initializer_list<int>&>::value, "Error");
197 static_assert(std::is_assignable<std::initializer_list<int>&, const
198 std::initializer_list<int>&>::value, "Error");
199 static_assert(!std::is_assignable<const std::initializer_list<int>&,
200 std::initializer_list<int>>::value, "Error");
202 static_assert(!std::is_assignable<const AnyAssign&, int>::value, "Error");
203 static_assert(!std::is_assignable<AnyAssign&, void>::value, "Error");
205 static_assert(!std::is_assignable<void, int>::value, "Error");
206 static_assert(!std::is_assignable<const void, int>::value, "Error");
207 static_assert(!std::is_assignable<int, void>::value, "Error");
208 static_assert(!std::is_assignable<int, const void>::value, "Error");
209 static_assert(!std::is_assignable<const int, void>::value, "Error");
210 static_assert(!std::is_assignable<const int, const void>::value, "Error");
211 static_assert(!std::is_assignable<int&, void>::value, "Error");
212 static_assert(!std::is_assignable<int&, const void>::value, "Error");
213 static_assert(!std::is_assignable<const int&, void>::value, "Error");
214 static_assert(!std::is_assignable<const int&, const void>::value, "Error");
215 static_assert(!std::is_assignable<void, void>::value, "Error");
216 static_assert(!std::is_assignable<const void, void>::value, "Error");
217 static_assert(!std::is_assignable<const void, const void>::value, "Error");
219 static_assert(!std::is_assignable<int[1], int[1]>::value, "Error");
220 static_assert(!std::is_assignable<int(&)[1], int[1]>::value, "Error");
221 static_assert(!std::is_assignable<int(&)[1], int(&)[1]>::value, "Error");
222 static_assert(!std::is_assignable<int[2], int[1]>::value, "Error");
223 static_assert(!std::is_assignable<int(&)[2], int[1]>::value, "Error");
224 static_assert(!std::is_assignable<int(&)[2], int(&)[1]>::value, "Error");
225 static_assert(!std::is_assignable<int[1], void>::value, "Error");
226 static_assert(!std::is_assignable<int(&)[1], void>::value, "Error");
227 static_assert(!std::is_assignable<void, int[1]>::value, "Error");
228 static_assert(!std::is_assignable<void, int(&)[1]>::value, "Error");
230 static_assert(!std::is_assignable<int[], int[]>::value, "Error");
231 static_assert(!std::is_assignable<int(&)[], int[]>::value, "Error");
232 static_assert(!std::is_assignable<int(&)[], int(&)[]>::value, "Error");
233 static_assert(!std::is_assignable<int[1], int[]>::value, "Error");
234 static_assert(!std::is_assignable<int(&)[1], int[]>::value, "Error");
235 static_assert(!std::is_assignable<int(&)[1], int(&)[]>::value, "Error");
236 static_assert(!std::is_assignable<int[], int[1]>::value, "Error");
237 static_assert(!std::is_assignable<int(&)[], int[1]>::value, "Error");
238 static_assert(!std::is_assignable<int(&)[], int(&)[1]>::value, "Error");
239 static_assert(!std::is_assignable<int[], void>::value, "Error");
240 static_assert(!std::is_assignable<int(&)[], void>::value, "Error");
241 static_assert(!std::is_assignable<void, int[]>::value, "Error");
242 static_assert(!std::is_assignable<void, int(&)[]>::value, "Error");
244 static_assert(std::is_assignable<DelCopyAssign&,
245 DelCopyAssign>::value, "Error");
246 static_assert(!std::is_assignable<DelCopyAssign&, const
247 DelCopyAssign>::value, "Error");
248 static_assert(!std::is_assignable<DelCopyAssign&,
249 DelCopyAssign&>::value, "Error");
250 static_assert(!std::is_assignable<DelCopyAssign&, const
251 DelCopyAssign&>::value, "Error");
252 static_assert(!std::is_assignable<DelCopyAssign&, void>::value, "Error");
253 static_assert(!std::is_assignable<DelCopyAssign&, void()>::value, "Error");
254 static_assert(!std::is_assignable<DelCopyAssign&, void(&)()>::value, "Error");
255 static_assert(!std::is_assignable<DelCopyAssign&, int>::value, "Error");
257 static_assert(std::is_assignable<DelAnyAssign&,
258 DelAnyAssign&&>::value, "Error");
259 static_assert(std::is_assignable<DelAnyAssign&, const
260 DelAnyAssign&>::value, "Error");
261 static_assert(std::is_assignable<DelAnyAssign,
262 DelAnyAssign&&>::value, "Error");
263 static_assert(std::is_assignable<DelAnyAssign, const
264 DelAnyAssign&>::value, "Error");
266 static_assert(!std::is_assignable<const DelAnyAssign&,
267 DelAnyAssign&&>::value, "Error");
268 static_assert(!std::is_assignable<const DelAnyAssign&, const
269 DelAnyAssign&>::value, "Error");
270 static_assert(!std::is_assignable<const DelAnyAssign,
271 DelAnyAssign&&>::value, "Error");
272 static_assert(!std::is_assignable<const DelAnyAssign, const
273 DelAnyAssign&>::value, "Error");
275 static_assert(!std::is_assignable<DelAnyAssign&, int>::value, "Error");
276 static_assert(!std::is_assignable<DelAnyAssign&, int&>::value, "Error");
277 static_assert(!std::is_assignable<DelAnyAssign&, const int&>::value, "Error");
278 static_assert(!std::is_assignable<DelAnyAssign&, void>::value, "Error");
279 static_assert(!std::is_assignable<DelAnyAssign&, void()>::value, "Error");
280 static_assert(!std::is_assignable<DelAnyAssign&, void()
281 const>::value, "Error");
282 static_assert(!std::is_assignable<DelAnyAssign&, void(&)()>::value, "Error");
283 static_assert(!std::is_assignable<DelAnyAssign&, void(&&)()>::value, "Error");
284 static_assert(!std::is_assignable<DelAnyAssign&,
285 std::nullptr_t>::value, "Error");
286 static_assert(!std::is_assignable<DelAnyAssign&,
287 std::nullptr_t&>::value, "Error");
288 static_assert(!std::is_assignable<DelAnyAssign&,
289 std::initializer_list<int>>::value, "Error");
290 static_assert(!std::is_assignable<DelAnyAssign&,
291 std::initializer_list<int>&>::value, "Error");
292 static_assert(!std::is_assignable<DelAnyAssign&, bool>::value, "Error");
293 static_assert(!std::is_assignable<DelAnyAssign&, bool&>::value, "Error");
294 static_assert(!std::is_assignable<DelAnyAssign&, E>::value, "Error");
295 static_assert(!std::is_assignable<DelAnyAssign&, E&>::value, "Error");
296 static_assert(!std::is_assignable<DelAnyAssign&, SE>::value, "Error");
297 static_assert(!std::is_assignable<DelAnyAssign&, SE&>::value, "Error");
298 static_assert(!std::is_assignable<DelAnyAssign&, Empty>::value, "Error");
299 static_assert(!std::is_assignable<DelAnyAssign&, Empty&>::value, "Error");
300 static_assert(!std::is_assignable<DelAnyAssign&, B>::value, "Error");
301 static_assert(!std::is_assignable<DelAnyAssign&, B&>::value, "Error");
302 static_assert(!std::is_assignable<DelAnyAssign&, U>::value, "Error");
303 static_assert(!std::is_assignable<DelAnyAssign&, U&>::value, "Error");
304 static_assert(!std::is_assignable<DelAnyAssign&, void*>::value, "Error");
305 static_assert(!std::is_assignable<DelAnyAssign&, int*>::value, "Error");
306 static_assert(!std::is_assignable<DelAnyAssign&, B*>::value, "Error");
307 static_assert(!std::is_assignable<DelAnyAssign&, D*>::value, "Error");
308 static_assert(!std::is_assignable<DelAnyAssign&, int B::*>::value, "Error");
309 static_assert(!std::is_assignable<DelAnyAssign&, int D::*>::value, "Error");
310 static_assert(!std::is_assignable<DelAnyAssign&, int[]>::value, "Error");
311 static_assert(!std::is_assignable<DelAnyAssign&, int[1]>::value, "Error");
312 static_assert(!std::is_assignable<DelAnyAssign&, int(&)[]>::value, "Error");
313 static_assert(!std::is_assignable<DelAnyAssign&, int(&)[1]>::value, "Error");
315 static_assert(!std::is_assignable<void(), void>::value, "Error");
316 static_assert(!std::is_assignable<void, void()>::value, "Error");
317 static_assert(!std::is_assignable<void(), void()>::value, "Error");
319 static_assert(!std::is_assignable<void(&)(), void>::value, "Error");
320 static_assert(!std::is_assignable<void, void(&)()>::value, "Error");
321 static_assert(!std::is_assignable<void(&)(), void(&)()>::value, "Error");
322 static_assert(!std::is_assignable<void(&)(), void()>::value, "Error");
323 static_assert(!std::is_assignable<void(), void(&)()>::value, "Error");
325 static_assert(std::is_assignable<int&, ImplicitTo<int>>::value, "Error");
326 static_assert(!std::is_assignable<int&, ExplicitTo<int>>::value, "Error");
327 static_assert(!std::is_assignable<int, ImplicitTo<int>>::value, "Error");
328 static_assert(!std::is_assignable<int, ExplicitTo<int>>::value, "Error");
329 static_assert(!std::is_assignable<const int, ImplicitTo<int>>::value, "Error");
330 static_assert(!std::is_assignable<const int, ExplicitTo<int>>::value, "Error");
331 static_assert(!std::is_assignable<const int&,
332 ImplicitTo<int>>::value, "Error");
333 static_assert(!std::is_assignable<const int&,
334 ExplicitTo<int>>::value, "Error");
336 static_assert(std::is_assignable<DelImplicitTo<int>&,
337 DelImplicitTo<int>>::value, "Error");
338 static_assert(std::is_assignable<DelImplicitTo<int>,
339 DelImplicitTo<int>>::value, "Error");
340 static_assert(!std::is_assignable<int&, DelImplicitTo<int>>::value, "Error");
341 static_assert(!std::is_assignable<int, DelImplicitTo<int>>::value, "Error");
342 static_assert(!std::is_assignable<const int&,
343 DelImplicitTo<int>>::value, "Error");
344 static_assert(!std::is_assignable<const int,
345 DelImplicitTo<int>>::value, "Error");
346 static_assert(!std::is_assignable<int&, DelExplicitTo<int>>::value, "Error");
347 static_assert(!std::is_assignable<int, DelExplicitTo<int>>::value, "Error");
348 static_assert(!std::is_assignable<const int&,
349 DelExplicitTo<int>>::value, "Error");
350 static_assert(!std::is_assignable<const int,
351 DelExplicitTo<int>>::value, "Error");
353 static_assert(std::is_assignable<B&, B>::value, "Error");
354 static_assert(std::is_assignable<B&, D>::value, "Error");
355 static_assert(std::is_assignable<B&, B&>::value, "Error");
356 static_assert(std::is_assignable<B&, D&>::value, "Error");
357 static_assert(!std::is_assignable<const B&, B&>::value, "Error");
358 static_assert(!std::is_assignable<const B&, D&>::value, "Error");
359 static_assert(!std::is_assignable<D&, B>::value, "Error");
360 static_assert(!std::is_assignable<D&, B&>::value, "Error");
362 static_assert(std::is_assignable<B*&, B*>::value, "Error");
363 static_assert(std::is_assignable<B*&, D*>::value, "Error");
364 static_assert(std::is_assignable<const B*&, D*>::value, "Error");
365 static_assert(std::is_assignable<const B*&, const D*>::value, "Error");
366 static_assert(std::is_assignable<B*&, B*&>::value, "Error");
367 static_assert(std::is_assignable<B*&, D*&>::value, "Error");
368 static_assert(std::is_assignable<const B*&, B*&>::value, "Error");
369 static_assert(std::is_assignable<const B*&, D*&>::value, "Error");
370 static_assert(!std::is_assignable<B* const&, B*&>::value, "Error");
371 static_assert(!std::is_assignable<B* const&, D*&>::value, "Error");
372 static_assert(!std::is_assignable<D*&, B*>::value, "Error");
373 static_assert(!std::is_assignable<D*&, B*&>::value, "Error");
375 static_assert(std::is_assignable<MO&, MO>::value, "Error");
376 static_assert(std::is_assignable<MO&, MO&&>::value, "Error");
377 static_assert(std::is_assignable<MO, MO>::value, "Error");
378 static_assert(std::is_assignable<MO, MO&&>::value, "Error");
380 static_assert(!std::is_assignable<const MO&, MO>::value, "Error");
381 static_assert(!std::is_assignable<const MO&, MO&&>::value, "Error");
382 static_assert(!std::is_assignable<MO&, const MO&&>::value, "Error");
383 static_assert(!std::is_assignable<MO&, MO&>::value, "Error");
384 static_assert(!std::is_assignable<MO&, const MO&>::value, "Error");
385 static_assert(!std::is_assignable<const MO, MO>::value, "Error");
386 static_assert(!std::is_assignable<const MO, MO&&>::value, "Error");
387 static_assert(!std::is_assignable<MO, const MO&&>::value, "Error");
388 static_assert(!std::is_assignable<MO, MO&>::value, "Error");
389 static_assert(!std::is_assignable<MO, const MO&>::value, "Error");
391 static_assert(!std::is_assignable<NontrivialUnion&,
392 NontrivialUnion>::value, "Error");
393 static_assert(!std::is_assignable<NontrivialUnion&,
394 NontrivialUnion&&>::value, "Error");
395 static_assert(!std::is_assignable<NontrivialUnion&,
396 NontrivialUnion&>::value, "Error");
397 static_assert(!std::is_assignable<NontrivialUnion&, const
398 NontrivialUnion&>::value, "Error");
399 static_assert(!std::is_assignable<NontrivialUnion&, const
400 NontrivialUnion&&>::value, "Error");
402 static_assert(std::is_assignable<Abstract&, Abstract>::value, "Error");
403 static_assert(std::is_assignable<Abstract&, Abstract&&>::value, "Error");
404 static_assert(std::is_assignable<Abstract&, Abstract&>::value, "Error");
405 static_assert(std::is_assignable<Abstract&, const Abstract&>::value, "Error");
406 static_assert(std::is_assignable<Abstract&, const Abstract&&>::value, "Error");
407 static_assert(std::is_assignable<Abstract&&, Abstract>::value, "Error");
408 static_assert(std::is_assignable<Abstract&&, Abstract&&>::value, "Error");
409 static_assert(std::is_assignable<Abstract&&, Abstract&>::value, "Error");
410 static_assert(std::is_assignable<Abstract&&, const Abstract&>::value, "Error");
411 static_assert(std::is_assignable<Abstract&&, const
412 Abstract&&>::value, "Error");
414 static_assert(std::is_assignable<AbstractDelDtor&,
415 AbstractDelDtor>::value, "Error");
416 static_assert(std::is_assignable<AbstractDelDtor&,
417 AbstractDelDtor&&>::value, "Error");
418 static_assert(std::is_assignable<AbstractDelDtor&,
419 AbstractDelDtor&>::value, "Error");
420 static_assert(std::is_assignable<AbstractDelDtor&, const
421 AbstractDelDtor&>::value, "Error");
422 static_assert(std::is_assignable<AbstractDelDtor&, const
423 AbstractDelDtor&&>::value, "Error");
424 static_assert(std::is_assignable<AbstractDelDtor&&,
425 AbstractDelDtor>::value, "Error");
426 static_assert(std::is_assignable<AbstractDelDtor&&,
427 AbstractDelDtor&&>::value, "Error");
428 static_assert(std::is_assignable<AbstractDelDtor&&,
429 AbstractDelDtor&>::value, "Error");
430 static_assert(std::is_assignable<AbstractDelDtor&&, const
431 AbstractDelDtor&>::value, "Error");
432 static_assert(std::is_assignable<AbstractDelDtor&&, const
433 AbstractDelDtor&&>::value, "Error");
435 static_assert(std::is_assignable<DelDef&, DelDef>::value, "Error");
436 static_assert(std::is_assignable<DelDef&, DelDef&&>::value, "Error");
437 static_assert(std::is_assignable<DelDef&, DelDef&>::value, "Error");
438 static_assert(std::is_assignable<DelDef&, const DelDef&>::value, "Error");
439 static_assert(std::is_assignable<DelDef&, const DelDef&&>::value, "Error");
440 static_assert(std::is_assignable<DelDef&&, DelDef>::value, "Error");
441 static_assert(std::is_assignable<DelDef&&, DelDef&&>::value, "Error");
442 static_assert(std::is_assignable<DelDef&&, DelDef&>::value, "Error");
443 static_assert(std::is_assignable<DelDef&&, const DelDef&>::value, "Error");
444 static_assert(std::is_assignable<DelDef&&, const DelDef&&>::value, "Error");
446 static_assert(std::is_assignable<Ellipsis&, Ellipsis>::value, "Error");
447 static_assert(std::is_assignable<Ellipsis&, const Ellipsis>::value, "Error");
448 static_assert(std::is_assignable<Ellipsis&, Ellipsis&>::value, "Error");
449 static_assert(std::is_assignable<Ellipsis&, const Ellipsis&>::value, "Error");
450 static_assert(std::is_assignable<Ellipsis, Ellipsis>::value, "Error");
451 static_assert(std::is_assignable<Ellipsis, const Ellipsis>::value, "Error");
452 static_assert(std::is_assignable<Ellipsis, Ellipsis&>::value, "Error");
453 static_assert(std::is_assignable<Ellipsis, const Ellipsis&>::value, "Error");
455 static_assert(!std::is_assignable<Ellipsis&, void>::value, "Error");
457 static_assert(std::is_assignable<Ellipsis&, int>::value, "Error");
458 static_assert(std::is_assignable<Ellipsis&, const int>::value, "Error");
459 static_assert(std::is_assignable<Ellipsis&, int&>::value, "Error");
460 static_assert(std::is_assignable<Ellipsis&, const int&>::value, "Error");
461 static_assert(std::is_assignable<Ellipsis&, Empty>::value, "Error");
462 static_assert(std::is_assignable<Ellipsis&, const Empty>::value, "Error");
463 static_assert(std::is_assignable<Ellipsis&, Empty&>::value, "Error");
464 static_assert(std::is_assignable<Ellipsis&, const Empty&>::value, "Error");
465 static_assert(std::is_assignable<Ellipsis&, E>::value, "Error");
466 static_assert(std::is_assignable<Ellipsis&, const E>::value, "Error");
467 static_assert(std::is_assignable<Ellipsis&, E&>::value, "Error");
468 static_assert(std::is_assignable<Ellipsis&, const E&>::value, "Error");
469 static_assert(std::is_assignable<Ellipsis&, SE>::value, "Error");
470 static_assert(std::is_assignable<Ellipsis&, const SE>::value, "Error");
471 static_assert(std::is_assignable<Ellipsis&, SE&>::value, "Error");
472 static_assert(std::is_assignable<Ellipsis&, const SE&>::value, "Error");
473 static_assert(std::is_assignable<Ellipsis&, bool>::value, "Error");
474 static_assert(std::is_assignable<Ellipsis&, const bool>::value, "Error");
475 static_assert(std::is_assignable<Ellipsis&, bool&>::value, "Error");
476 static_assert(std::is_assignable<Ellipsis&, const bool&>::value, "Error");
477 static_assert(std::is_assignable<Ellipsis&, std::nullptr_t>::value, "Error");
478 static_assert(std::is_assignable<Ellipsis&, const
479 std::nullptr_t>::value, "Error");
480 static_assert(std::is_assignable<Ellipsis&, std::nullptr_t&>::value, "Error");
481 static_assert(std::is_assignable<Ellipsis&, const
482 std::nullptr_t&>::value, "Error");
483 static_assert(std::is_assignable<Ellipsis&, void*>::value, "Error");
484 static_assert(std::is_assignable<Ellipsis&, const void*>::value, "Error");
485 static_assert(std::is_assignable<Ellipsis&, void*&>::value, "Error");
486 static_assert(std::is_assignable<Ellipsis&, const void*&>::value, "Error");
487 static_assert(std::is_assignable<Ellipsis&, void()>::value, "Error");
488 static_assert(std::is_assignable<Ellipsis&, void(&)()>::value, "Error");
490 static_assert(std::is_assignable<DelEllipsis&, DelEllipsis>::value, "Error");
491 static_assert(std::is_assignable<DelEllipsis&, const
492 DelEllipsis>::value, "Error");
493 static_assert(std::is_assignable<DelEllipsis&, DelEllipsis&>::value, "Error");
494 static_assert(std::is_assignable<DelEllipsis&, const
495 DelEllipsis&>::value, "Error");
496 static_assert(std::is_assignable<DelEllipsis, DelEllipsis>::value, "Error");
497 static_assert(std::is_assignable<DelEllipsis, const
498 DelEllipsis>::value, "Error");
499 static_assert(std::is_assignable<DelEllipsis, DelEllipsis&>::value, "Error");
500 static_assert(std::is_assignable<DelEllipsis, const
501 DelEllipsis&>::value, "Error");
503 static_assert(!std::is_assignable<DelEllipsis&, void>::value, "Error");
504 static_assert(!std::is_assignable<DelEllipsis&, int>::value, "Error");
505 static_assert(!std::is_assignable<DelEllipsis&, const int>::value, "Error");
506 static_assert(!std::is_assignable<DelEllipsis&, int&>::value, "Error");
507 static_assert(!std::is_assignable<DelEllipsis&, const int&>::value, "Error");
508 static_assert(!std::is_assignable<DelEllipsis&, Empty>::value, "Error");
509 static_assert(!std::is_assignable<DelEllipsis&, const Empty>::value, "Error");
510 static_assert(!std::is_assignable<DelEllipsis&, Empty&>::value, "Error");
511 static_assert(!std::is_assignable<DelEllipsis&, const Empty&>::value, "Error");
512 static_assert(!std::is_assignable<DelEllipsis&, E>::value, "Error");
513 static_assert(!std::is_assignable<DelEllipsis&, const E>::value, "Error");
514 static_assert(!std::is_assignable<DelEllipsis&, E&>::value, "Error");
515 static_assert(!std::is_assignable<DelEllipsis&, const E&>::value, "Error");
516 static_assert(!std::is_assignable<DelEllipsis&, SE>::value, "Error");
517 static_assert(!std::is_assignable<DelEllipsis&, const SE>::value, "Error");
518 static_assert(!std::is_assignable<DelEllipsis&, SE&>::value, "Error");
519 static_assert(!std::is_assignable<DelEllipsis&, const SE&>::value, "Error");
520 static_assert(!std::is_assignable<DelEllipsis&, bool>::value, "Error");
521 static_assert(!std::is_assignable<DelEllipsis&, const bool>::value, "Error");
522 static_assert(!std::is_assignable<DelEllipsis&, bool&>::value, "Error");
523 static_assert(!std::is_assignable<DelEllipsis&, const bool&>::value, "Error");
524 static_assert(!std::is_assignable<DelEllipsis&,
525 std::nullptr_t>::value, "Error");
526 static_assert(!std::is_assignable<DelEllipsis&, const
527 std::nullptr_t>::value, "Error");
528 static_assert(!std::is_assignable<DelEllipsis&,
529 std::nullptr_t&>::value, "Error");
530 static_assert(!std::is_assignable<DelEllipsis&, const
531 std::nullptr_t&>::value, "Error");
532 static_assert(!std::is_assignable<DelEllipsis&, void*>::value, "Error");
533 static_assert(!std::is_assignable<DelEllipsis&, const void*>::value, "Error");
534 static_assert(!std::is_assignable<DelEllipsis&, void*&>::value, "Error");
535 static_assert(!std::is_assignable<DelEllipsis&, const void*&>::value, "Error");
536 static_assert(!std::is_assignable<DelEllipsis&, void()>::value, "Error");
537 static_assert(!std::is_assignable<DelEllipsis&, void(&)()>::value, "Error");
539 static_assert(std::is_assignable<FromArgs<int>&, int>::value, "Error");
540 static_assert(std::is_assignable<FromArgs<int>&, const int>::value, "Error");
541 static_assert(!std::is_assignable<FromArgs<int>&,
542 ImplicitTo<int>>::value, "Error");
543 static_assert(!std::is_assignable<FromArgs<int>&, ImplicitTo<const
544 int>>::value, "Error");
545 static_assert(!std::is_assignable<FromArgs<int>&,
546 ExplicitTo<int>>::value, "Error");
547 static_assert(!std::is_assignable<FromArgs<int>&, ExplicitTo<const
548 int>>::value, "Error");
550 static_assert(!std::is_assignable<DelFromArgs<int>&, int>::value, "Error");
551 static_assert(!std::is_assignable<DelFromArgs<int>&, const
552 int>::value, "Error");
554 static_assert(std::is_assignable<void(*&)(),
555 ImplicitTo<void(*)()>>::value, "Error");
556 static_assert(!std::is_assignable<void(*&)(),
557 ExplicitTo<void(*)()>>::value, "Error");
559 static_assert(std::is_assignable<UAssignAll&, UAssignAll>::value, "Error");
560 static_assert(std::is_assignable<UAssignAll&, const
561 UAssignAll>::value, "Error");
562 static_assert(std::is_assignable<UAssignAll&, UAssignAll&>::value, "Error");
563 static_assert(std::is_assignable<UAssignAll&, const
564 UAssignAll&>::value, "Error");
566 static_assert(std::is_assignable<UAssignAll, UAssignAll>::value, "Error");
567 static_assert(std::is_assignable<UAssignAll, const
568 UAssignAll>::value, "Error");
569 static_assert(std::is_assignable<UAssignAll, UAssignAll&>::value, "Error");
570 static_assert(std::is_assignable<UAssignAll, const
571 UAssignAll&>::value, "Error");
573 static_assert(!std::is_assignable<UAssignAll&, void>::value, "Error");
574 static_assert(!std::is_assignable<const UAssignAll&, void>::value, "Error");
575 static_assert(!std::is_assignable<const UAssignAll&,
576 UAssignAll>::value, "Error");
577 static_assert(!std::is_assignable<const UAssignAll&, const
578 UAssignAll>::value, "Error");
579 static_assert(!std::is_assignable<const UAssignAll&,
580 UAssignAll&>::value, "Error");
581 static_assert(!std::is_assignable<const UAssignAll&, const
582 UAssignAll&>::value, "Error");
584 static_assert(std::is_assignable<UAssignAll&, int>::value, "Error");
585 static_assert(std::is_assignable<UAssignAll&, int&>::value, "Error");
586 static_assert(std::is_assignable<UAssignAll&, E>::value, "Error");
587 static_assert(std::is_assignable<UAssignAll&, E&>::value, "Error");
588 static_assert(std::is_assignable<UAssignAll&, SE>::value, "Error");
589 static_assert(std::is_assignable<UAssignAll&, SE&>::value, "Error");
590 static_assert(std::is_assignable<UAssignAll&, double>::value, "Error");
591 static_assert(std::is_assignable<UAssignAll&, double&>::value, "Error");
592 static_assert(std::is_assignable<UAssignAll&, Empty>::value, "Error");
593 static_assert(std::is_assignable<UAssignAll&, Empty&>::value, "Error");
594 static_assert(std::is_assignable<UAssignAll&, B>::value, "Error");
595 static_assert(std::is_assignable<UAssignAll&, B&>::value, "Error");
596 static_assert(std::is_assignable<UAssignAll&, U>::value, "Error");
597 static_assert(std::is_assignable<UAssignAll&, U&>::value, "Error");
598 static_assert(std::is_assignable<UAssignAll&, std::nullptr_t>::value, "Error");
599 static_assert(std::is_assignable<UAssignAll&,
600 std::nullptr_t&>::value, "Error");
601 static_assert(std::is_assignable<UAssignAll&, void()>::value, "Error");
602 static_assert(std::is_assignable<UAssignAll&, void(&)()>::value, "Error");
603 static_assert(std::is_assignable<UAssignAll&, void() const>::value, "Error");
604 static_assert(std::is_assignable<UAssignAll&, void(*)()>::value, "Error");
605 static_assert(std::is_assignable<UAssignAll&, void(*&)()>::value, "Error");
606 static_assert(std::is_assignable<UAssignAll&, int*>::value, "Error");
607 static_assert(std::is_assignable<UAssignAll&, int*&>::value, "Error");
608 static_assert(std::is_assignable<UAssignAll&, void*>::value, "Error");
609 static_assert(std::is_assignable<UAssignAll&, void*&>::value, "Error");
610 static_assert(std::is_assignable<UAssignAll&, const int*>::value, "Error");
611 static_assert(std::is_assignable<UAssignAll&, const int*&>::value, "Error");
612 static_assert(std::is_assignable<UAssignAll&, const void*>::value, "Error");
613 static_assert(std::is_assignable<UAssignAll&, const void*&>::value, "Error");
614 static_assert(std::is_assignable<UAssignAll&, int[1]>::value, "Error");
615 static_assert(std::is_assignable<UAssignAll&, int(&)[1]>::value, "Error");
616 static_assert(std::is_assignable<UAssignAll&, int[]>::value, "Error");
617 static_assert(std::is_assignable<UAssignAll&, int(&)[]>::value, "Error");
619 static_assert(!std::is_assignable<UDelAssignAll&, int>::value, "Error");
620 static_assert(!std::is_assignable<UDelAssignAll&, int&>::value, "Error");
621 static_assert(!std::is_assignable<UDelAssignAll&, E>::value, "Error");
622 static_assert(!std::is_assignable<UDelAssignAll&, E&>::value, "Error");
623 static_assert(!std::is_assignable<UDelAssignAll&, SE>::value, "Error");
624 static_assert(!std::is_assignable<UDelAssignAll&, SE&>::value, "Error");
625 static_assert(!std::is_assignable<UDelAssignAll&, double>::value, "Error");
626 static_assert(!std::is_assignable<UDelAssignAll&, double&>::value, "Error");
627 static_assert(!std::is_assignable<UDelAssignAll&, Empty>::value, "Error");
628 static_assert(!std::is_assignable<UDelAssignAll&, Empty&>::value, "Error");
629 static_assert(!std::is_assignable<UDelAssignAll&, B>::value, "Error");
630 static_assert(!std::is_assignable<UDelAssignAll&, B&>::value, "Error");
631 static_assert(!std::is_assignable<UDelAssignAll&, U>::value, "Error");
632 static_assert(!std::is_assignable<UDelAssignAll&, U&>::value, "Error");
633 static_assert(!std::is_assignable<UDelAssignAll&,
634 std::nullptr_t>::value, "Error");
635 static_assert(!std::is_assignable<UDelAssignAll&,
636 std::nullptr_t&>::value, "Error");
637 static_assert(!std::is_assignable<UDelAssignAll&, void()>::value, "Error");
638 static_assert(!std::is_assignable<UDelAssignAll&, void(&)()>::value, "Error");
639 static_assert(!std::is_assignable<UDelAssignAll&, void()
640 const>::value, "Error");
641 static_assert(!std::is_assignable<UDelAssignAll&, void(*)()>::value, "Error");
642 static_assert(!std::is_assignable<UDelAssignAll&, void(*&)()>::value, "Error");
643 static_assert(!std::is_assignable<UDelAssignAll&, int*>::value, "Error");
644 static_assert(!std::is_assignable<UDelAssignAll&, int*&>::value, "Error");
645 static_assert(!std::is_assignable<UDelAssignAll&, void*>::value, "Error");
646 static_assert(!std::is_assignable<UDelAssignAll&, void*&>::value, "Error");
647 static_assert(!std::is_assignable<UDelAssignAll&, const int*>::value, "Error");
648 static_assert(!std::is_assignable<UDelAssignAll&, const
649 int*&>::value, "Error");
650 static_assert(!std::is_assignable<UDelAssignAll&, const
651 void*>::value, "Error");
652 static_assert(!std::is_assignable<UDelAssignAll&, const
653 void*&>::value, "Error");
654 static_assert(!std::is_assignable<UDelAssignAll&, int[1]>::value, "Error");
655 static_assert(!std::is_assignable<UDelAssignAll&, int(&)[1]>::value, "Error");
656 static_assert(!std::is_assignable<UDelAssignAll&, int[]>::value, "Error");
657 static_assert(!std::is_assignable<UDelAssignAll&, int(&)[]>::value, "Error");
659 static_assert(!std::is_assignable<void(&)(), std::nullptr_t>::value, "Error");
660 static_assert(!std::is_assignable<std::nullptr_t, void(&)()>::value, "Error");
661 static_assert(!std::is_assignable<void(&)(), int[]>::value, "Error");
662 static_assert(!std::is_assignable<int[], void(&)()>::value, "Error");
663 static_assert(!std::is_assignable<int[], std::nullptr_t>::value, "Error");
664 static_assert(!std::is_assignable<std::nullptr_t, int[]>::value, "Error");
665 static_assert(!std::is_assignable<int[1], std::nullptr_t>::value, "Error");
666 static_assert(!std::is_assignable<std::nullptr_t, int[1]>::value, "Error");
667 static_assert(!std::is_assignable<void, std::nullptr_t>::value, "Error");
668 static_assert(!std::is_assignable<std::nullptr_t, void>::value, "Error");
669 static_assert(!std::is_assignable<const D&, B&>::value, "Error");
670 static_assert(!std::is_assignable<const B&, B&>::value, "Error");
672 static_assert(std::is_assignable<B&, const D&>::value, "Error");
673 static_assert(std::is_assignable<B&, const B&>::value, "Error");
674 static_assert(std::is_assignable<int&, const int&>::value, "Error");
675 static_assert(std::is_assignable<int&, const double&>::value, "Error");