• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -verify -std=gnu++11 %s
2 #define T(b) (b) ? 1 : -1
3 #define F(b) (b) ? -1 : 1
4 
5 struct NonPOD { NonPOD(int); };
6 
7 // PODs
8 enum Enum { EV };
9 struct POD { Enum e; int i; float f; NonPOD* p; };
10 struct Empty {};
11 typedef Empty EmptyAr[10];
12 typedef int Int;
13 typedef Int IntAr[10];
14 typedef Int IntArNB[];
15 class Statics { static int priv; static NonPOD np; };
16 union EmptyUnion {};
17 union Union { int i; float f; };
18 struct HasFunc { void f (); };
19 struct HasOp { void operator *(); };
20 struct HasConv { operator int(); };
21 struct HasAssign { void operator =(int); };
22 
23 struct HasAnonymousUnion {
24   union {
25     int i;
26     float f;
27   };
28 };
29 
30 typedef int Vector __attribute__((vector_size(16)));
31 typedef int VectorExt __attribute__((ext_vector_type(4)));
32 
33 // Not PODs
34 typedef const void cvoid;
35 struct Derives : POD {};
36 typedef Derives DerivesAr[10];
37 typedef Derives DerivesArNB[];
38 struct DerivesEmpty : Empty {};
39 struct HasCons { HasCons(int); };
40 struct HasCopyAssign { HasCopyAssign operator =(const HasCopyAssign&); };
41 struct HasMoveAssign { HasMoveAssign operator =(const HasMoveAssign&&); };
42 struct HasNoThrowMoveAssign {
43   HasNoThrowMoveAssign& operator=(
44     const HasNoThrowMoveAssign&&) throw(); };
45 struct HasNoExceptNoThrowMoveAssign {
46   HasNoExceptNoThrowMoveAssign& operator=(
47     const HasNoExceptNoThrowMoveAssign&&) noexcept;
48 };
49 struct HasThrowMoveAssign {
50   HasThrowMoveAssign& operator=(
51     const HasThrowMoveAssign&&) throw(POD); };
52 struct HasNoExceptFalseMoveAssign {
53   HasNoExceptFalseMoveAssign& operator=(
54     const HasNoExceptFalseMoveAssign&&) noexcept(false); };
55 struct HasMoveCtor { HasMoveCtor(const HasMoveCtor&&); };
56 struct HasMemberMoveCtor { HasMoveCtor member; };
57 struct HasMemberMoveAssign { HasMoveAssign member; };
58 struct HasStaticMemberMoveCtor { static HasMoveCtor member; };
59 struct HasStaticMemberMoveAssign { static HasMoveAssign member; };
60 struct HasMemberThrowMoveAssign { HasThrowMoveAssign member; };
61 struct HasMemberNoExceptFalseMoveAssign {
62   HasNoExceptFalseMoveAssign member; };
63 struct HasMemberNoThrowMoveAssign { HasNoThrowMoveAssign member; };
64 struct HasMemberNoExceptNoThrowMoveAssign {
65   HasNoExceptNoThrowMoveAssign member; };
66 
67 struct HasDefaultTrivialCopyAssign {
68   HasDefaultTrivialCopyAssign &operator=(
69     const HasDefaultTrivialCopyAssign&) = default;
70 };
71 struct TrivialMoveButNotCopy {
72   TrivialMoveButNotCopy &operator=(TrivialMoveButNotCopy&&) = default;
73   TrivialMoveButNotCopy &operator=(const TrivialMoveButNotCopy&);
74 };
75 struct NonTrivialDefault {
76   NonTrivialDefault();
77 };
78 
79 struct HasDest { ~HasDest(); };
80 class  HasPriv { int priv; };
81 class  HasProt { protected: int prot; };
HasRefHasRef82 struct HasRef { int i; int& ref; HasRef() : i(0), ref(i) {} };
83 struct HasNonPOD { NonPOD np; };
VirtHasVirt84 struct HasVirt { virtual void Virt() {}; };
85 typedef NonPOD NonPODAr[10];
86 typedef HasVirt VirtAr[10];
87 typedef NonPOD NonPODArNB[];
88 union NonPODUnion { int i; Derives n; };
89 struct DerivesHasCons : HasCons {};
90 struct DerivesHasCopyAssign : HasCopyAssign {};
91 struct DerivesHasMoveAssign : HasMoveAssign {};
92 struct DerivesHasDest : HasDest {};
93 struct DerivesHasPriv : HasPriv {};
94 struct DerivesHasProt : HasProt {};
95 struct DerivesHasRef : HasRef {};
96 struct DerivesHasVirt : HasVirt {};
97 struct DerivesHasMoveCtor : HasMoveCtor {};
98 
99 struct HasNoThrowCopyAssign {
100   void operator =(const HasNoThrowCopyAssign&) throw();
101 };
102 struct HasMultipleCopyAssign {
103   void operator =(const HasMultipleCopyAssign&) throw();
104   void operator =(volatile HasMultipleCopyAssign&);
105 };
106 struct HasMultipleNoThrowCopyAssign {
107   void operator =(const HasMultipleNoThrowCopyAssign&) throw();
108   void operator =(volatile HasMultipleNoThrowCopyAssign&) throw();
109 };
110 
111 struct HasNoThrowConstructor { HasNoThrowConstructor() throw(); };
112 struct HasNoThrowConstructorWithArgs {
113   HasNoThrowConstructorWithArgs(HasCons i = HasCons(0)) throw();
114 };
115 
116 struct HasNoThrowCopy { HasNoThrowCopy(const HasNoThrowCopy&) throw(); };
117 struct HasMultipleCopy {
118   HasMultipleCopy(const HasMultipleCopy&) throw();
119   HasMultipleCopy(volatile HasMultipleCopy&);
120 };
121 struct HasMultipleNoThrowCopy {
122   HasMultipleNoThrowCopy(const HasMultipleNoThrowCopy&) throw();
123   HasMultipleNoThrowCopy(volatile HasMultipleNoThrowCopy&) throw();
124 };
125 
126 struct HasVirtDest { virtual ~HasVirtDest(); };
127 struct DerivedVirtDest : HasVirtDest {};
128 typedef HasVirtDest VirtDestAr[1];
129 
130 class AllPrivate {
131   AllPrivate() throw();
132   AllPrivate(const AllPrivate&) throw();
133   AllPrivate &operator=(const AllPrivate &) throw();
134   ~AllPrivate() throw();
135 };
136 
137 struct ThreeArgCtor {
138   ThreeArgCtor(int*, char*, int);
139 };
140 
is_pod()141 void is_pod()
142 {
143   { int arr[T(__is_pod(int))]; }
144   { int arr[T(__is_pod(Enum))]; }
145   { int arr[T(__is_pod(POD))]; }
146   { int arr[T(__is_pod(Int))]; }
147   { int arr[T(__is_pod(IntAr))]; }
148   { int arr[T(__is_pod(Statics))]; }
149   { int arr[T(__is_pod(Empty))]; }
150   { int arr[T(__is_pod(EmptyUnion))]; }
151   { int arr[T(__is_pod(Union))]; }
152   { int arr[T(__is_pod(HasFunc))]; }
153   { int arr[T(__is_pod(HasOp))]; }
154   { int arr[T(__is_pod(HasConv))]; }
155   { int arr[T(__is_pod(HasAssign))]; }
156   { int arr[T(__is_pod(IntArNB))]; }
157   { int arr[T(__is_pod(HasAnonymousUnion))]; }
158   { int arr[T(__is_pod(Vector))]; }
159   { int arr[T(__is_pod(VectorExt))]; }
160   { int arr[T(__is_pod(Derives))]; }
161   { int arr[T(__is_pod(DerivesAr))]; }
162   { int arr[T(__is_pod(DerivesArNB))]; }
163   { int arr[T(__is_pod(DerivesEmpty))]; }
164   { int arr[T(__is_pod(HasPriv))]; }
165   { int arr[T(__is_pod(HasProt))]; }
166   { int arr[T(__is_pod(DerivesHasPriv))]; }
167   { int arr[T(__is_pod(DerivesHasProt))]; }
168 
169   { int arr[F(__is_pod(HasCons))]; }
170   { int arr[F(__is_pod(HasCopyAssign))]; }
171   { int arr[F(__is_pod(HasMoveAssign))]; }
172   { int arr[F(__is_pod(HasDest))]; }
173   { int arr[F(__is_pod(HasRef))]; }
174   { int arr[F(__is_pod(HasVirt))]; }
175   { int arr[F(__is_pod(DerivesHasCons))]; }
176   { int arr[F(__is_pod(DerivesHasCopyAssign))]; }
177   { int arr[F(__is_pod(DerivesHasMoveAssign))]; }
178   { int arr[F(__is_pod(DerivesHasDest))]; }
179   { int arr[F(__is_pod(DerivesHasRef))]; }
180   { int arr[F(__is_pod(DerivesHasVirt))]; }
181   { int arr[F(__is_pod(NonPOD))]; }
182   { int arr[F(__is_pod(HasNonPOD))]; }
183   { int arr[F(__is_pod(NonPODAr))]; }
184   { int arr[F(__is_pod(NonPODArNB))]; }
185   { int arr[F(__is_pod(void))]; }
186   { int arr[F(__is_pod(cvoid))]; }
187 // { int arr[F(__is_pod(NonPODUnion))]; }
188 }
189 
190 typedef Empty EmptyAr[10];
191 struct Bit0 { int : 0; };
192 struct Bit0Cons { int : 0; Bit0Cons(); };
193 struct BitOnly { int x : 3; };
194 struct DerivesVirt : virtual POD {};
195 
is_empty()196 void is_empty()
197 {
198   { int arr[T(__is_empty(Empty))]; }
199   { int arr[T(__is_empty(DerivesEmpty))]; }
200   { int arr[T(__is_empty(HasCons))]; }
201   { int arr[T(__is_empty(HasCopyAssign))]; }
202   { int arr[T(__is_empty(HasMoveAssign))]; }
203   { int arr[T(__is_empty(HasDest))]; }
204   { int arr[T(__is_empty(HasFunc))]; }
205   { int arr[T(__is_empty(HasOp))]; }
206   { int arr[T(__is_empty(HasConv))]; }
207   { int arr[T(__is_empty(HasAssign))]; }
208   { int arr[T(__is_empty(Bit0))]; }
209   { int arr[T(__is_empty(Bit0Cons))]; }
210 
211   { int arr[F(__is_empty(Int))]; }
212   { int arr[F(__is_empty(POD))]; }
213   { int arr[F(__is_empty(EmptyUnion))]; }
214   { int arr[F(__is_empty(EmptyAr))]; }
215   { int arr[F(__is_empty(HasRef))]; }
216   { int arr[F(__is_empty(HasVirt))]; }
217   { int arr[F(__is_empty(BitOnly))]; }
218   { int arr[F(__is_empty(void))]; }
219   { int arr[F(__is_empty(IntArNB))]; }
220   { int arr[F(__is_empty(HasAnonymousUnion))]; }
221 //  { int arr[F(__is_empty(DerivesVirt))]; }
222 }
223 
224 typedef Derives ClassType;
225 
is_class()226 void is_class()
227 {
228   { int arr[T(__is_class(Derives))]; }
229   { int arr[T(__is_class(HasPriv))]; }
230   { int arr[T(__is_class(ClassType))]; }
231   { int arr[T(__is_class(HasAnonymousUnion))]; }
232 
233   { int arr[F(__is_class(int))]; }
234   { int arr[F(__is_class(Enum))]; }
235   { int arr[F(__is_class(Int))]; }
236   { int arr[F(__is_class(IntAr))]; }
237   { int arr[F(__is_class(DerivesAr))]; }
238   { int arr[F(__is_class(Union))]; }
239   { int arr[F(__is_class(cvoid))]; }
240   { int arr[F(__is_class(IntArNB))]; }
241 }
242 
243 typedef Union UnionAr[10];
244 typedef Union UnionType;
245 
is_union()246 void is_union()
247 {
248   { int arr[T(__is_union(Union))]; }
249   { int arr[T(__is_union(UnionType))]; }
250 
251   { int arr[F(__is_union(int))]; }
252   { int arr[F(__is_union(Enum))]; }
253   { int arr[F(__is_union(Int))]; }
254   { int arr[F(__is_union(IntAr))]; }
255   { int arr[F(__is_union(UnionAr))]; }
256   { int arr[F(__is_union(cvoid))]; }
257   { int arr[F(__is_union(IntArNB))]; }
258   { int arr[F(__is_union(HasAnonymousUnion))]; }
259 }
260 
261 typedef Enum EnumType;
262 
is_enum()263 void is_enum()
264 {
265   { int arr[T(__is_enum(Enum))]; }
266   { int arr[T(__is_enum(EnumType))]; }
267 
268   { int arr[F(__is_enum(int))]; }
269   { int arr[F(__is_enum(Union))]; }
270   { int arr[F(__is_enum(Int))]; }
271   { int arr[F(__is_enum(IntAr))]; }
272   { int arr[F(__is_enum(UnionAr))]; }
273   { int arr[F(__is_enum(Derives))]; }
274   { int arr[F(__is_enum(ClassType))]; }
275   { int arr[F(__is_enum(cvoid))]; }
276   { int arr[F(__is_enum(IntArNB))]; }
277   { int arr[F(__is_enum(HasAnonymousUnion))]; }
278 }
279 
280 struct FinalClass final {
281 };
282 
283 template<typename T>
284 struct PotentiallyFinal { };
285 
286 template<typename T>
287 struct PotentiallyFinal<T*> final { };
288 
289 template<>
290 struct PotentiallyFinal<int> final { };
291 
is_final()292 void is_final()
293 {
294 	{ int arr[T(__is_final(FinalClass))]; }
295 	{ int arr[T(__is_final(PotentiallyFinal<float*>))]; }
296 	{ int arr[T(__is_final(PotentiallyFinal<int>))]; }
297 
298 	{ int arr[F(__is_final(int))]; }
299 	{ int arr[F(__is_final(Union))]; }
300 	{ int arr[F(__is_final(Int))]; }
301 	{ int arr[F(__is_final(IntAr))]; }
302 	{ int arr[F(__is_final(UnionAr))]; }
303 	{ int arr[F(__is_final(Derives))]; }
304 	{ int arr[F(__is_final(ClassType))]; }
305 	{ int arr[F(__is_final(cvoid))]; }
306 	{ int arr[F(__is_final(IntArNB))]; }
307 	{ int arr[F(__is_final(HasAnonymousUnion))]; }
308 	{ int arr[F(__is_final(PotentiallyFinal<float>))]; }
309 }
310 
311 typedef HasVirt Polymorph;
312 struct InheritPolymorph : Polymorph {};
313 
is_polymorphic()314 void is_polymorphic()
315 {
316   { int arr[T(__is_polymorphic(Polymorph))]; }
317   { int arr[T(__is_polymorphic(InheritPolymorph))]; }
318 
319   { int arr[F(__is_polymorphic(int))]; }
320   { int arr[F(__is_polymorphic(Union))]; }
321   { int arr[F(__is_polymorphic(Int))]; }
322   { int arr[F(__is_polymorphic(IntAr))]; }
323   { int arr[F(__is_polymorphic(UnionAr))]; }
324   { int arr[F(__is_polymorphic(Derives))]; }
325   { int arr[F(__is_polymorphic(ClassType))]; }
326   { int arr[F(__is_polymorphic(Enum))]; }
327   { int arr[F(__is_polymorphic(cvoid))]; }
328   { int arr[F(__is_polymorphic(IntArNB))]; }
329 }
330 
is_integral()331 void is_integral()
332 {
333   int t01[T(__is_integral(bool))];
334   int t02[T(__is_integral(char))];
335   int t03[T(__is_integral(signed char))];
336   int t04[T(__is_integral(unsigned char))];
337   //int t05[T(__is_integral(char16_t))];
338   //int t06[T(__is_integral(char32_t))];
339   int t07[T(__is_integral(wchar_t))];
340   int t08[T(__is_integral(short))];
341   int t09[T(__is_integral(unsigned short))];
342   int t10[T(__is_integral(int))];
343   int t11[T(__is_integral(unsigned int))];
344   int t12[T(__is_integral(long))];
345   int t13[T(__is_integral(unsigned long))];
346 
347   int t21[F(__is_integral(float))];
348   int t22[F(__is_integral(double))];
349   int t23[F(__is_integral(long double))];
350   int t24[F(__is_integral(Union))];
351   int t25[F(__is_integral(UnionAr))];
352   int t26[F(__is_integral(Derives))];
353   int t27[F(__is_integral(ClassType))];
354   int t28[F(__is_integral(Enum))];
355   int t29[F(__is_integral(void))];
356   int t30[F(__is_integral(cvoid))];
357   int t31[F(__is_integral(IntArNB))];
358 }
359 
is_floating_point()360 void is_floating_point()
361 {
362   int t01[T(__is_floating_point(float))];
363   int t02[T(__is_floating_point(double))];
364   int t03[T(__is_floating_point(long double))];
365 
366   int t11[F(__is_floating_point(bool))];
367   int t12[F(__is_floating_point(char))];
368   int t13[F(__is_floating_point(signed char))];
369   int t14[F(__is_floating_point(unsigned char))];
370   //int t15[F(__is_floating_point(char16_t))];
371   //int t16[F(__is_floating_point(char32_t))];
372   int t17[F(__is_floating_point(wchar_t))];
373   int t18[F(__is_floating_point(short))];
374   int t19[F(__is_floating_point(unsigned short))];
375   int t20[F(__is_floating_point(int))];
376   int t21[F(__is_floating_point(unsigned int))];
377   int t22[F(__is_floating_point(long))];
378   int t23[F(__is_floating_point(unsigned long))];
379   int t24[F(__is_floating_point(Union))];
380   int t25[F(__is_floating_point(UnionAr))];
381   int t26[F(__is_floating_point(Derives))];
382   int t27[F(__is_floating_point(ClassType))];
383   int t28[F(__is_floating_point(Enum))];
384   int t29[F(__is_floating_point(void))];
385   int t30[F(__is_floating_point(cvoid))];
386   int t31[F(__is_floating_point(IntArNB))];
387 }
388 
is_arithmetic()389 void is_arithmetic()
390 {
391   int t01[T(__is_arithmetic(float))];
392   int t02[T(__is_arithmetic(double))];
393   int t03[T(__is_arithmetic(long double))];
394   int t11[T(__is_arithmetic(bool))];
395   int t12[T(__is_arithmetic(char))];
396   int t13[T(__is_arithmetic(signed char))];
397   int t14[T(__is_arithmetic(unsigned char))];
398   //int t15[T(__is_arithmetic(char16_t))];
399   //int t16[T(__is_arithmetic(char32_t))];
400   int t17[T(__is_arithmetic(wchar_t))];
401   int t18[T(__is_arithmetic(short))];
402   int t19[T(__is_arithmetic(unsigned short))];
403   int t20[T(__is_arithmetic(int))];
404   int t21[T(__is_arithmetic(unsigned int))];
405   int t22[T(__is_arithmetic(long))];
406   int t23[T(__is_arithmetic(unsigned long))];
407 
408   int t24[F(__is_arithmetic(Union))];
409   int t25[F(__is_arithmetic(UnionAr))];
410   int t26[F(__is_arithmetic(Derives))];
411   int t27[F(__is_arithmetic(ClassType))];
412   int t28[F(__is_arithmetic(Enum))];
413   int t29[F(__is_arithmetic(void))];
414   int t30[F(__is_arithmetic(cvoid))];
415   int t31[F(__is_arithmetic(IntArNB))];
416 }
417 
418 struct ACompleteType {};
419 struct AnIncompleteType;
420 
is_complete_type()421 void is_complete_type()
422 {
423   int t01[T(__is_complete_type(float))];
424   int t02[T(__is_complete_type(double))];
425   int t03[T(__is_complete_type(long double))];
426   int t11[T(__is_complete_type(bool))];
427   int t12[T(__is_complete_type(char))];
428   int t13[T(__is_complete_type(signed char))];
429   int t14[T(__is_complete_type(unsigned char))];
430   //int t15[T(__is_complete_type(char16_t))];
431   //int t16[T(__is_complete_type(char32_t))];
432   int t17[T(__is_complete_type(wchar_t))];
433   int t18[T(__is_complete_type(short))];
434   int t19[T(__is_complete_type(unsigned short))];
435   int t20[T(__is_complete_type(int))];
436   int t21[T(__is_complete_type(unsigned int))];
437   int t22[T(__is_complete_type(long))];
438   int t23[T(__is_complete_type(unsigned long))];
439   int t24[T(__is_complete_type(ACompleteType))];
440 
441   int t30[F(__is_complete_type(AnIncompleteType))];
442 }
443 
is_void()444 void is_void()
445 {
446   int t01[T(__is_void(void))];
447   int t02[T(__is_void(cvoid))];
448 
449   int t10[F(__is_void(float))];
450   int t11[F(__is_void(double))];
451   int t12[F(__is_void(long double))];
452   int t13[F(__is_void(bool))];
453   int t14[F(__is_void(char))];
454   int t15[F(__is_void(signed char))];
455   int t16[F(__is_void(unsigned char))];
456   int t17[F(__is_void(wchar_t))];
457   int t18[F(__is_void(short))];
458   int t19[F(__is_void(unsigned short))];
459   int t20[F(__is_void(int))];
460   int t21[F(__is_void(unsigned int))];
461   int t22[F(__is_void(long))];
462   int t23[F(__is_void(unsigned long))];
463   int t24[F(__is_void(Union))];
464   int t25[F(__is_void(UnionAr))];
465   int t26[F(__is_void(Derives))];
466   int t27[F(__is_void(ClassType))];
467   int t28[F(__is_void(Enum))];
468   int t29[F(__is_void(IntArNB))];
469   int t30[F(__is_void(void*))];
470   int t31[F(__is_void(cvoid*))];
471 }
472 
is_array()473 void is_array()
474 {
475   int t01[T(__is_array(IntAr))];
476   int t02[T(__is_array(IntArNB))];
477   int t03[T(__is_array(UnionAr))];
478 
479   int t10[F(__is_array(void))];
480   int t11[F(__is_array(cvoid))];
481   int t12[F(__is_array(float))];
482   int t13[F(__is_array(double))];
483   int t14[F(__is_array(long double))];
484   int t15[F(__is_array(bool))];
485   int t16[F(__is_array(char))];
486   int t17[F(__is_array(signed char))];
487   int t18[F(__is_array(unsigned char))];
488   int t19[F(__is_array(wchar_t))];
489   int t20[F(__is_array(short))];
490   int t21[F(__is_array(unsigned short))];
491   int t22[F(__is_array(int))];
492   int t23[F(__is_array(unsigned int))];
493   int t24[F(__is_array(long))];
494   int t25[F(__is_array(unsigned long))];
495   int t26[F(__is_array(Union))];
496   int t27[F(__is_array(Derives))];
497   int t28[F(__is_array(ClassType))];
498   int t29[F(__is_array(Enum))];
499   int t30[F(__is_array(void*))];
500   int t31[F(__is_array(cvoid*))];
501 }
502 
tmpl_func(T &)503 template <typename T> void tmpl_func(T&) {}
504 
505 template <typename T> struct type_wrapper {
506   typedef T type;
507   typedef T* ptrtype;
508   typedef T& reftype;
509 };
510 
is_function()511 void is_function()
512 {
513   int t01[T(__is_function(type_wrapper<void(void)>::type))];
514   int t02[T(__is_function(typeof(tmpl_func<int>)))];
515 
516   typedef void (*ptr_to_func_type)(void);
517 
518   int t10[F(__is_function(void))];
519   int t11[F(__is_function(cvoid))];
520   int t12[F(__is_function(float))];
521   int t13[F(__is_function(double))];
522   int t14[F(__is_function(long double))];
523   int t15[F(__is_function(bool))];
524   int t16[F(__is_function(char))];
525   int t17[F(__is_function(signed char))];
526   int t18[F(__is_function(unsigned char))];
527   int t19[F(__is_function(wchar_t))];
528   int t20[F(__is_function(short))];
529   int t21[F(__is_function(unsigned short))];
530   int t22[F(__is_function(int))];
531   int t23[F(__is_function(unsigned int))];
532   int t24[F(__is_function(long))];
533   int t25[F(__is_function(unsigned long))];
534   int t26[F(__is_function(Union))];
535   int t27[F(__is_function(Derives))];
536   int t28[F(__is_function(ClassType))];
537   int t29[F(__is_function(Enum))];
538   int t30[F(__is_function(void*))];
539   int t31[F(__is_function(cvoid*))];
540   int t32[F(__is_function(void(*)()))];
541   int t33[F(__is_function(ptr_to_func_type))];
542   int t34[F(__is_function(type_wrapper<void(void)>::ptrtype))];
543   int t35[F(__is_function(type_wrapper<void(void)>::reftype))];
544 }
545 
is_reference()546 void is_reference()
547 {
548   int t01[T(__is_reference(int&))];
549   int t02[T(__is_reference(const int&))];
550   int t03[T(__is_reference(void *&))];
551 
552   int t10[F(__is_reference(int))];
553   int t11[F(__is_reference(const int))];
554   int t12[F(__is_reference(void *))];
555 }
556 
is_lvalue_reference()557 void is_lvalue_reference()
558 {
559   int t01[T(__is_lvalue_reference(int&))];
560   int t02[T(__is_lvalue_reference(void *&))];
561   int t03[T(__is_lvalue_reference(const int&))];
562   int t04[T(__is_lvalue_reference(void * const &))];
563 
564   int t10[F(__is_lvalue_reference(int))];
565   int t11[F(__is_lvalue_reference(const int))];
566   int t12[F(__is_lvalue_reference(void *))];
567 }
568 
569 #if __has_feature(cxx_rvalue_references)
570 
is_rvalue_reference()571 void is_rvalue_reference()
572 {
573   int t01[T(__is_rvalue_reference(const int&&))];
574   int t02[T(__is_rvalue_reference(void * const &&))];
575 
576   int t10[F(__is_rvalue_reference(int&))];
577   int t11[F(__is_rvalue_reference(void *&))];
578   int t12[F(__is_rvalue_reference(const int&))];
579   int t13[F(__is_rvalue_reference(void * const &))];
580   int t14[F(__is_rvalue_reference(int))];
581   int t15[F(__is_rvalue_reference(const int))];
582   int t16[F(__is_rvalue_reference(void *))];
583 }
584 
585 #endif
586 
is_fundamental()587 void is_fundamental()
588 {
589   int t01[T(__is_fundamental(float))];
590   int t02[T(__is_fundamental(double))];
591   int t03[T(__is_fundamental(long double))];
592   int t11[T(__is_fundamental(bool))];
593   int t12[T(__is_fundamental(char))];
594   int t13[T(__is_fundamental(signed char))];
595   int t14[T(__is_fundamental(unsigned char))];
596   //int t15[T(__is_fundamental(char16_t))];
597   //int t16[T(__is_fundamental(char32_t))];
598   int t17[T(__is_fundamental(wchar_t))];
599   int t18[T(__is_fundamental(short))];
600   int t19[T(__is_fundamental(unsigned short))];
601   int t20[T(__is_fundamental(int))];
602   int t21[T(__is_fundamental(unsigned int))];
603   int t22[T(__is_fundamental(long))];
604   int t23[T(__is_fundamental(unsigned long))];
605   int t24[T(__is_fundamental(void))];
606   int t25[T(__is_fundamental(cvoid))];
607 
608   int t30[F(__is_fundamental(Union))];
609   int t31[F(__is_fundamental(UnionAr))];
610   int t32[F(__is_fundamental(Derives))];
611   int t33[F(__is_fundamental(ClassType))];
612   int t34[F(__is_fundamental(Enum))];
613   int t35[F(__is_fundamental(IntArNB))];
614 }
615 
is_object()616 void is_object()
617 {
618   int t01[T(__is_object(int))];
619   int t02[T(__is_object(int *))];
620   int t03[T(__is_object(void *))];
621   int t04[T(__is_object(Union))];
622   int t05[T(__is_object(UnionAr))];
623   int t06[T(__is_object(ClassType))];
624   int t07[T(__is_object(Enum))];
625 
626   int t10[F(__is_object(type_wrapper<void(void)>::type))];
627   int t11[F(__is_object(int&))];
628   int t12[F(__is_object(void))];
629 }
630 
is_scalar()631 void is_scalar()
632 {
633   int t01[T(__is_scalar(float))];
634   int t02[T(__is_scalar(double))];
635   int t03[T(__is_scalar(long double))];
636   int t04[T(__is_scalar(bool))];
637   int t05[T(__is_scalar(char))];
638   int t06[T(__is_scalar(signed char))];
639   int t07[T(__is_scalar(unsigned char))];
640   int t08[T(__is_scalar(wchar_t))];
641   int t09[T(__is_scalar(short))];
642   int t10[T(__is_scalar(unsigned short))];
643   int t11[T(__is_scalar(int))];
644   int t12[T(__is_scalar(unsigned int))];
645   int t13[T(__is_scalar(long))];
646   int t14[T(__is_scalar(unsigned long))];
647   int t15[T(__is_scalar(Enum))];
648   int t16[T(__is_scalar(void*))];
649   int t17[T(__is_scalar(cvoid*))];
650 
651   int t20[F(__is_scalar(void))];
652   int t21[F(__is_scalar(cvoid))];
653   int t22[F(__is_scalar(Union))];
654   int t23[F(__is_scalar(UnionAr))];
655   int t24[F(__is_scalar(Derives))];
656   int t25[F(__is_scalar(ClassType))];
657   int t26[F(__is_scalar(IntArNB))];
658 }
659 
660 struct StructWithMembers {
661   int member;
methodStructWithMembers662   void method() {}
663 };
664 
is_compound()665 void is_compound()
666 {
667   int t01[T(__is_compound(void*))];
668   int t02[T(__is_compound(cvoid*))];
669   int t03[T(__is_compound(void (*)()))];
670   int t04[T(__is_compound(int StructWithMembers::*))];
671   int t05[T(__is_compound(void (StructWithMembers::*)()))];
672   int t06[T(__is_compound(int&))];
673   int t07[T(__is_compound(Union))];
674   int t08[T(__is_compound(UnionAr))];
675   int t09[T(__is_compound(Derives))];
676   int t10[T(__is_compound(ClassType))];
677   int t11[T(__is_compound(IntArNB))];
678   int t12[T(__is_compound(Enum))];
679 
680   int t20[F(__is_compound(float))];
681   int t21[F(__is_compound(double))];
682   int t22[F(__is_compound(long double))];
683   int t23[F(__is_compound(bool))];
684   int t24[F(__is_compound(char))];
685   int t25[F(__is_compound(signed char))];
686   int t26[F(__is_compound(unsigned char))];
687   int t27[F(__is_compound(wchar_t))];
688   int t28[F(__is_compound(short))];
689   int t29[F(__is_compound(unsigned short))];
690   int t30[F(__is_compound(int))];
691   int t31[F(__is_compound(unsigned int))];
692   int t32[F(__is_compound(long))];
693   int t33[F(__is_compound(unsigned long))];
694   int t34[F(__is_compound(void))];
695   int t35[F(__is_compound(cvoid))];
696 }
697 
is_pointer()698 void is_pointer()
699 {
700   StructWithMembers x;
701 
702   int t01[T(__is_pointer(void*))];
703   int t02[T(__is_pointer(cvoid*))];
704   int t03[T(__is_pointer(cvoid*))];
705   int t04[T(__is_pointer(char*))];
706   int t05[T(__is_pointer(int*))];
707   int t06[T(__is_pointer(int**))];
708   int t07[T(__is_pointer(ClassType*))];
709   int t08[T(__is_pointer(Derives*))];
710   int t09[T(__is_pointer(Enum*))];
711   int t10[T(__is_pointer(IntArNB*))];
712   int t11[T(__is_pointer(Union*))];
713   int t12[T(__is_pointer(UnionAr*))];
714   int t13[T(__is_pointer(StructWithMembers*))];
715   int t14[T(__is_pointer(void (*)()))];
716 
717   int t20[F(__is_pointer(void))];
718   int t21[F(__is_pointer(cvoid))];
719   int t22[F(__is_pointer(cvoid))];
720   int t23[F(__is_pointer(char))];
721   int t24[F(__is_pointer(int))];
722   int t25[F(__is_pointer(int))];
723   int t26[F(__is_pointer(ClassType))];
724   int t27[F(__is_pointer(Derives))];
725   int t28[F(__is_pointer(Enum))];
726   int t29[F(__is_pointer(IntArNB))];
727   int t30[F(__is_pointer(Union))];
728   int t31[F(__is_pointer(UnionAr))];
729   int t32[F(__is_pointer(StructWithMembers))];
730   int t33[F(__is_pointer(int StructWithMembers::*))];
731   int t34[F(__is_pointer(void (StructWithMembers::*) ()))];
732 }
733 
is_member_object_pointer()734 void is_member_object_pointer()
735 {
736   StructWithMembers x;
737 
738   int t01[T(__is_member_object_pointer(int StructWithMembers::*))];
739 
740   int t10[F(__is_member_object_pointer(void (StructWithMembers::*) ()))];
741   int t11[F(__is_member_object_pointer(void*))];
742   int t12[F(__is_member_object_pointer(cvoid*))];
743   int t13[F(__is_member_object_pointer(cvoid*))];
744   int t14[F(__is_member_object_pointer(char*))];
745   int t15[F(__is_member_object_pointer(int*))];
746   int t16[F(__is_member_object_pointer(int**))];
747   int t17[F(__is_member_object_pointer(ClassType*))];
748   int t18[F(__is_member_object_pointer(Derives*))];
749   int t19[F(__is_member_object_pointer(Enum*))];
750   int t20[F(__is_member_object_pointer(IntArNB*))];
751   int t21[F(__is_member_object_pointer(Union*))];
752   int t22[F(__is_member_object_pointer(UnionAr*))];
753   int t23[F(__is_member_object_pointer(StructWithMembers*))];
754   int t24[F(__is_member_object_pointer(void))];
755   int t25[F(__is_member_object_pointer(cvoid))];
756   int t26[F(__is_member_object_pointer(cvoid))];
757   int t27[F(__is_member_object_pointer(char))];
758   int t28[F(__is_member_object_pointer(int))];
759   int t29[F(__is_member_object_pointer(int))];
760   int t30[F(__is_member_object_pointer(ClassType))];
761   int t31[F(__is_member_object_pointer(Derives))];
762   int t32[F(__is_member_object_pointer(Enum))];
763   int t33[F(__is_member_object_pointer(IntArNB))];
764   int t34[F(__is_member_object_pointer(Union))];
765   int t35[F(__is_member_object_pointer(UnionAr))];
766   int t36[F(__is_member_object_pointer(StructWithMembers))];
767   int t37[F(__is_member_object_pointer(void (*)()))];
768 }
769 
is_member_function_pointer()770 void is_member_function_pointer()
771 {
772   StructWithMembers x;
773 
774   int t01[T(__is_member_function_pointer(void (StructWithMembers::*) ()))];
775 
776   int t10[F(__is_member_function_pointer(int StructWithMembers::*))];
777   int t11[F(__is_member_function_pointer(void*))];
778   int t12[F(__is_member_function_pointer(cvoid*))];
779   int t13[F(__is_member_function_pointer(cvoid*))];
780   int t14[F(__is_member_function_pointer(char*))];
781   int t15[F(__is_member_function_pointer(int*))];
782   int t16[F(__is_member_function_pointer(int**))];
783   int t17[F(__is_member_function_pointer(ClassType*))];
784   int t18[F(__is_member_function_pointer(Derives*))];
785   int t19[F(__is_member_function_pointer(Enum*))];
786   int t20[F(__is_member_function_pointer(IntArNB*))];
787   int t21[F(__is_member_function_pointer(Union*))];
788   int t22[F(__is_member_function_pointer(UnionAr*))];
789   int t23[F(__is_member_function_pointer(StructWithMembers*))];
790   int t24[F(__is_member_function_pointer(void))];
791   int t25[F(__is_member_function_pointer(cvoid))];
792   int t26[F(__is_member_function_pointer(cvoid))];
793   int t27[F(__is_member_function_pointer(char))];
794   int t28[F(__is_member_function_pointer(int))];
795   int t29[F(__is_member_function_pointer(int))];
796   int t30[F(__is_member_function_pointer(ClassType))];
797   int t31[F(__is_member_function_pointer(Derives))];
798   int t32[F(__is_member_function_pointer(Enum))];
799   int t33[F(__is_member_function_pointer(IntArNB))];
800   int t34[F(__is_member_function_pointer(Union))];
801   int t35[F(__is_member_function_pointer(UnionAr))];
802   int t36[F(__is_member_function_pointer(StructWithMembers))];
803   int t37[F(__is_member_function_pointer(void (*)()))];
804 }
805 
is_member_pointer()806 void is_member_pointer()
807 {
808   StructWithMembers x;
809 
810   int t01[T(__is_member_pointer(int StructWithMembers::*))];
811   int t02[T(__is_member_pointer(void (StructWithMembers::*) ()))];
812 
813   int t10[F(__is_member_pointer(void*))];
814   int t11[F(__is_member_pointer(cvoid*))];
815   int t12[F(__is_member_pointer(cvoid*))];
816   int t13[F(__is_member_pointer(char*))];
817   int t14[F(__is_member_pointer(int*))];
818   int t15[F(__is_member_pointer(int**))];
819   int t16[F(__is_member_pointer(ClassType*))];
820   int t17[F(__is_member_pointer(Derives*))];
821   int t18[F(__is_member_pointer(Enum*))];
822   int t19[F(__is_member_pointer(IntArNB*))];
823   int t20[F(__is_member_pointer(Union*))];
824   int t21[F(__is_member_pointer(UnionAr*))];
825   int t22[F(__is_member_pointer(StructWithMembers*))];
826   int t23[F(__is_member_pointer(void))];
827   int t24[F(__is_member_pointer(cvoid))];
828   int t25[F(__is_member_pointer(cvoid))];
829   int t26[F(__is_member_pointer(char))];
830   int t27[F(__is_member_pointer(int))];
831   int t28[F(__is_member_pointer(int))];
832   int t29[F(__is_member_pointer(ClassType))];
833   int t30[F(__is_member_pointer(Derives))];
834   int t31[F(__is_member_pointer(Enum))];
835   int t32[F(__is_member_pointer(IntArNB))];
836   int t33[F(__is_member_pointer(Union))];
837   int t34[F(__is_member_pointer(UnionAr))];
838   int t35[F(__is_member_pointer(StructWithMembers))];
839   int t36[F(__is_member_pointer(void (*)()))];
840 }
841 
is_const()842 void is_const()
843 {
844   int t01[T(__is_const(cvoid))];
845   int t02[T(__is_const(const char))];
846   int t03[T(__is_const(const int))];
847   int t04[T(__is_const(const long))];
848   int t05[T(__is_const(const short))];
849   int t06[T(__is_const(const signed char))];
850   int t07[T(__is_const(const wchar_t))];
851   int t08[T(__is_const(const bool))];
852   int t09[T(__is_const(const float))];
853   int t10[T(__is_const(const double))];
854   int t11[T(__is_const(const long double))];
855   int t12[T(__is_const(const unsigned char))];
856   int t13[T(__is_const(const unsigned int))];
857   int t14[T(__is_const(const unsigned long long))];
858   int t15[T(__is_const(const unsigned long))];
859   int t16[T(__is_const(const unsigned short))];
860   int t17[T(__is_const(const void))];
861   int t18[T(__is_const(const ClassType))];
862   int t19[T(__is_const(const Derives))];
863   int t20[T(__is_const(const Enum))];
864   int t21[T(__is_const(const IntArNB))];
865   int t22[T(__is_const(const Union))];
866   int t23[T(__is_const(const UnionAr))];
867 
868   int t30[F(__is_const(char))];
869   int t31[F(__is_const(int))];
870   int t32[F(__is_const(long))];
871   int t33[F(__is_const(short))];
872   int t34[F(__is_const(signed char))];
873   int t35[F(__is_const(wchar_t))];
874   int t36[F(__is_const(bool))];
875   int t37[F(__is_const(float))];
876   int t38[F(__is_const(double))];
877   int t39[F(__is_const(long double))];
878   int t40[F(__is_const(unsigned char))];
879   int t41[F(__is_const(unsigned int))];
880   int t42[F(__is_const(unsigned long long))];
881   int t43[F(__is_const(unsigned long))];
882   int t44[F(__is_const(unsigned short))];
883   int t45[F(__is_const(void))];
884   int t46[F(__is_const(ClassType))];
885   int t47[F(__is_const(Derives))];
886   int t48[F(__is_const(Enum))];
887   int t49[F(__is_const(IntArNB))];
888   int t50[F(__is_const(Union))];
889   int t51[F(__is_const(UnionAr))];
890 }
891 
is_volatile()892 void is_volatile()
893 {
894   int t02[T(__is_volatile(volatile char))];
895   int t03[T(__is_volatile(volatile int))];
896   int t04[T(__is_volatile(volatile long))];
897   int t05[T(__is_volatile(volatile short))];
898   int t06[T(__is_volatile(volatile signed char))];
899   int t07[T(__is_volatile(volatile wchar_t))];
900   int t08[T(__is_volatile(volatile bool))];
901   int t09[T(__is_volatile(volatile float))];
902   int t10[T(__is_volatile(volatile double))];
903   int t11[T(__is_volatile(volatile long double))];
904   int t12[T(__is_volatile(volatile unsigned char))];
905   int t13[T(__is_volatile(volatile unsigned int))];
906   int t14[T(__is_volatile(volatile unsigned long long))];
907   int t15[T(__is_volatile(volatile unsigned long))];
908   int t16[T(__is_volatile(volatile unsigned short))];
909   int t17[T(__is_volatile(volatile void))];
910   int t18[T(__is_volatile(volatile ClassType))];
911   int t19[T(__is_volatile(volatile Derives))];
912   int t20[T(__is_volatile(volatile Enum))];
913   int t21[T(__is_volatile(volatile IntArNB))];
914   int t22[T(__is_volatile(volatile Union))];
915   int t23[T(__is_volatile(volatile UnionAr))];
916 
917   int t30[F(__is_volatile(char))];
918   int t31[F(__is_volatile(int))];
919   int t32[F(__is_volatile(long))];
920   int t33[F(__is_volatile(short))];
921   int t34[F(__is_volatile(signed char))];
922   int t35[F(__is_volatile(wchar_t))];
923   int t36[F(__is_volatile(bool))];
924   int t37[F(__is_volatile(float))];
925   int t38[F(__is_volatile(double))];
926   int t39[F(__is_volatile(long double))];
927   int t40[F(__is_volatile(unsigned char))];
928   int t41[F(__is_volatile(unsigned int))];
929   int t42[F(__is_volatile(unsigned long long))];
930   int t43[F(__is_volatile(unsigned long))];
931   int t44[F(__is_volatile(unsigned short))];
932   int t45[F(__is_volatile(void))];
933   int t46[F(__is_volatile(ClassType))];
934   int t47[F(__is_volatile(Derives))];
935   int t48[F(__is_volatile(Enum))];
936   int t49[F(__is_volatile(IntArNB))];
937   int t50[F(__is_volatile(Union))];
938   int t51[F(__is_volatile(UnionAr))];
939 }
940 
941 struct TrivialStruct {
942   int member;
943 };
944 
945 struct NonTrivialStruct {
946   int member;
NonTrivialStructNonTrivialStruct947   NonTrivialStruct() {
948     member = 0;
949   }
950 };
951 
952 struct SuperNonTrivialStruct {
SuperNonTrivialStructSuperNonTrivialStruct953   SuperNonTrivialStruct() { }
~SuperNonTrivialStructSuperNonTrivialStruct954   ~SuperNonTrivialStruct() { }
955 };
956 
957 struct NonTCStruct {
NonTCStructNonTCStruct958   NonTCStruct(const NonTCStruct&) {}
959 };
960 
961 struct AllDefaulted {
962   AllDefaulted() = default;
963   AllDefaulted(const AllDefaulted &) = default;
964   AllDefaulted(AllDefaulted &&) = default;
965   AllDefaulted &operator=(const AllDefaulted &) = default;
966   AllDefaulted &operator=(AllDefaulted &&) = default;
967   ~AllDefaulted() = default;
968 };
969 
970 struct NoDefaultMoveAssignDueToUDCopyCtor {
971   NoDefaultMoveAssignDueToUDCopyCtor(const NoDefaultMoveAssignDueToUDCopyCtor&);
972 };
973 
974 struct NoDefaultMoveAssignDueToUDCopyAssign {
975   NoDefaultMoveAssignDueToUDCopyAssign& operator=(
976     const NoDefaultMoveAssignDueToUDCopyAssign&);
977 };
978 
979 struct NoDefaultMoveAssignDueToDtor {
980   ~NoDefaultMoveAssignDueToDtor();
981 };
982 
983 struct AllDeleted {
984   AllDeleted() = delete;
985   AllDeleted(const AllDeleted &) = delete;
986   AllDeleted(AllDeleted &&) = delete;
987   AllDeleted &operator=(const AllDeleted &) = delete;
988   AllDeleted &operator=(AllDeleted &&) = delete;
989   ~AllDeleted() = delete;
990 };
991 
992 struct ExtDefaulted {
993   ExtDefaulted();
994   ExtDefaulted(const ExtDefaulted &);
995   ExtDefaulted(ExtDefaulted &&);
996   ExtDefaulted &operator=(const ExtDefaulted &);
997   ExtDefaulted &operator=(ExtDefaulted &&);
998   ~ExtDefaulted();
999 };
1000 
1001 // Despite being defaulted, these functions are not trivial.
1002 ExtDefaulted::ExtDefaulted() = default;
1003 ExtDefaulted::ExtDefaulted(const ExtDefaulted &) = default;
1004 ExtDefaulted::ExtDefaulted(ExtDefaulted &&) = default;
1005 ExtDefaulted &ExtDefaulted::operator=(const ExtDefaulted &) = default;
1006 ExtDefaulted &ExtDefaulted::operator=(ExtDefaulted &&) = default;
1007 ExtDefaulted::~ExtDefaulted() = default;
1008 
is_trivial2()1009 void is_trivial2()
1010 {
1011   int t01[T(__is_trivial(char))];
1012   int t02[T(__is_trivial(int))];
1013   int t03[T(__is_trivial(long))];
1014   int t04[T(__is_trivial(short))];
1015   int t05[T(__is_trivial(signed char))];
1016   int t06[T(__is_trivial(wchar_t))];
1017   int t07[T(__is_trivial(bool))];
1018   int t08[T(__is_trivial(float))];
1019   int t09[T(__is_trivial(double))];
1020   int t10[T(__is_trivial(long double))];
1021   int t11[T(__is_trivial(unsigned char))];
1022   int t12[T(__is_trivial(unsigned int))];
1023   int t13[T(__is_trivial(unsigned long long))];
1024   int t14[T(__is_trivial(unsigned long))];
1025   int t15[T(__is_trivial(unsigned short))];
1026   int t16[T(__is_trivial(ClassType))];
1027   int t17[T(__is_trivial(Derives))];
1028   int t18[T(__is_trivial(Enum))];
1029   int t19[T(__is_trivial(IntAr))];
1030   int t20[T(__is_trivial(Union))];
1031   int t21[T(__is_trivial(UnionAr))];
1032   int t22[T(__is_trivial(TrivialStruct))];
1033   int t23[T(__is_trivial(AllDefaulted))];
1034   int t24[T(__is_trivial(AllDeleted))];
1035 
1036   int t30[F(__is_trivial(void))];
1037   int t31[F(__is_trivial(NonTrivialStruct))];
1038   int t32[F(__is_trivial(SuperNonTrivialStruct))];
1039   int t33[F(__is_trivial(NonTCStruct))];
1040   int t34[F(__is_trivial(ExtDefaulted))];
1041 }
1042 
is_trivially_copyable2()1043 void is_trivially_copyable2()
1044 {
1045   int t01[T(__is_trivially_copyable(char))];
1046   int t02[T(__is_trivially_copyable(int))];
1047   int t03[T(__is_trivially_copyable(long))];
1048   int t04[T(__is_trivially_copyable(short))];
1049   int t05[T(__is_trivially_copyable(signed char))];
1050   int t06[T(__is_trivially_copyable(wchar_t))];
1051   int t07[T(__is_trivially_copyable(bool))];
1052   int t08[T(__is_trivially_copyable(float))];
1053   int t09[T(__is_trivially_copyable(double))];
1054   int t10[T(__is_trivially_copyable(long double))];
1055   int t11[T(__is_trivially_copyable(unsigned char))];
1056   int t12[T(__is_trivially_copyable(unsigned int))];
1057   int t13[T(__is_trivially_copyable(unsigned long long))];
1058   int t14[T(__is_trivially_copyable(unsigned long))];
1059   int t15[T(__is_trivially_copyable(unsigned short))];
1060   int t16[T(__is_trivially_copyable(ClassType))];
1061   int t17[T(__is_trivially_copyable(Derives))];
1062   int t18[T(__is_trivially_copyable(Enum))];
1063   int t19[T(__is_trivially_copyable(IntAr))];
1064   int t20[T(__is_trivially_copyable(Union))];
1065   int t21[T(__is_trivially_copyable(UnionAr))];
1066   int t22[T(__is_trivially_copyable(TrivialStruct))];
1067   int t23[T(__is_trivially_copyable(NonTrivialStruct))];
1068   int t24[T(__is_trivially_copyable(AllDefaulted))];
1069   int t25[T(__is_trivially_copyable(AllDeleted))];
1070 
1071   int t30[F(__is_trivially_copyable(void))];
1072   int t31[F(__is_trivially_copyable(SuperNonTrivialStruct))];
1073   int t32[F(__is_trivially_copyable(NonTCStruct))];
1074   int t33[F(__is_trivially_copyable(ExtDefaulted))];
1075 }
1076 
1077 struct CStruct {
1078   int one;
1079   int two;
1080 };
1081 
1082 struct CEmptyStruct {};
1083 
1084 struct CppEmptyStruct : CStruct {};
1085 struct CppStructStandard : CEmptyStruct {
1086   int three;
1087   int four;
1088 };
1089 struct CppStructNonStandardByBase : CStruct {
1090   int three;
1091   int four;
1092 };
1093 struct CppStructNonStandardByVirt : CStruct {
methodCppStructNonStandardByVirt1094   virtual void method() {}
1095 };
1096 struct CppStructNonStandardByMemb : CStruct {
1097   CppStructNonStandardByVirt member;
1098 };
1099 struct CppStructNonStandardByProt : CStruct {
1100   int five;
1101 protected:
1102   int six;
1103 };
1104 struct CppStructNonStandardByVirtBase : virtual CStruct {
1105 };
1106 struct CppStructNonStandardBySameBase : CEmptyStruct {
1107   CEmptyStruct member;
1108 };
1109 struct CppStructNonStandardBy2ndVirtBase : CEmptyStruct {
1110   CEmptyStruct member;
1111 };
1112 
is_standard_layout()1113 void is_standard_layout()
1114 {
1115   typedef const int ConstInt;
1116   typedef ConstInt ConstIntAr[4];
1117   typedef CppStructStandard CppStructStandardAr[4];
1118 
1119   int t01[T(__is_standard_layout(int))];
1120   int t02[T(__is_standard_layout(ConstInt))];
1121   int t03[T(__is_standard_layout(ConstIntAr))];
1122   int t04[T(__is_standard_layout(CStruct))];
1123   int t05[T(__is_standard_layout(CppStructStandard))];
1124   int t06[T(__is_standard_layout(CppStructStandardAr))];
1125   int t07[T(__is_standard_layout(Vector))];
1126   int t08[T(__is_standard_layout(VectorExt))];
1127 
1128   typedef CppStructNonStandardByBase CppStructNonStandardByBaseAr[4];
1129 
1130   int t10[F(__is_standard_layout(CppStructNonStandardByVirt))];
1131   int t11[F(__is_standard_layout(CppStructNonStandardByMemb))];
1132   int t12[F(__is_standard_layout(CppStructNonStandardByProt))];
1133   int t13[F(__is_standard_layout(CppStructNonStandardByVirtBase))];
1134   int t14[F(__is_standard_layout(CppStructNonStandardByBase))];
1135   int t15[F(__is_standard_layout(CppStructNonStandardByBaseAr))];
1136   int t16[F(__is_standard_layout(CppStructNonStandardBySameBase))];
1137   int t17[F(__is_standard_layout(CppStructNonStandardBy2ndVirtBase))];
1138 }
1139 
is_signed()1140 void is_signed()
1141 {
1142   //int t01[T(__is_signed(char))];
1143   int t02[T(__is_signed(int))];
1144   int t03[T(__is_signed(long))];
1145   int t04[T(__is_signed(short))];
1146   int t05[T(__is_signed(signed char))];
1147   int t06[T(__is_signed(wchar_t))];
1148 
1149   int t10[F(__is_signed(bool))];
1150   int t11[F(__is_signed(cvoid))];
1151   int t12[F(__is_signed(float))];
1152   int t13[F(__is_signed(double))];
1153   int t14[F(__is_signed(long double))];
1154   int t15[F(__is_signed(unsigned char))];
1155   int t16[F(__is_signed(unsigned int))];
1156   int t17[F(__is_signed(unsigned long long))];
1157   int t18[F(__is_signed(unsigned long))];
1158   int t19[F(__is_signed(unsigned short))];
1159   int t20[F(__is_signed(void))];
1160   int t21[F(__is_signed(ClassType))];
1161   int t22[F(__is_signed(Derives))];
1162   int t23[F(__is_signed(Enum))];
1163   int t24[F(__is_signed(IntArNB))];
1164   int t25[F(__is_signed(Union))];
1165   int t26[F(__is_signed(UnionAr))];
1166 }
1167 
is_unsigned()1168 void is_unsigned()
1169 {
1170   int t01[T(__is_unsigned(bool))];
1171   int t02[T(__is_unsigned(unsigned char))];
1172   int t03[T(__is_unsigned(unsigned short))];
1173   int t04[T(__is_unsigned(unsigned int))];
1174   int t05[T(__is_unsigned(unsigned long))];
1175   int t06[T(__is_unsigned(unsigned long long))];
1176   int t07[T(__is_unsigned(Enum))];
1177 
1178   int t10[F(__is_unsigned(void))];
1179   int t11[F(__is_unsigned(cvoid))];
1180   int t12[F(__is_unsigned(float))];
1181   int t13[F(__is_unsigned(double))];
1182   int t14[F(__is_unsigned(long double))];
1183   int t16[F(__is_unsigned(char))];
1184   int t17[F(__is_unsigned(signed char))];
1185   int t18[F(__is_unsigned(wchar_t))];
1186   int t19[F(__is_unsigned(short))];
1187   int t20[F(__is_unsigned(int))];
1188   int t21[F(__is_unsigned(long))];
1189   int t22[F(__is_unsigned(Union))];
1190   int t23[F(__is_unsigned(UnionAr))];
1191   int t24[F(__is_unsigned(Derives))];
1192   int t25[F(__is_unsigned(ClassType))];
1193   int t26[F(__is_unsigned(IntArNB))];
1194 }
1195 
1196 typedef Int& IntRef;
1197 typedef const IntAr ConstIntAr;
1198 typedef ConstIntAr ConstIntArAr[4];
1199 
1200 struct HasCopy {
1201   HasCopy(HasCopy& cp);
1202 };
1203 
1204 struct HasMove {
1205   HasMove(HasMove&& cp);
1206 };
1207 
1208 struct HasTemplateCons {
1209   HasVirt Annoying;
1210 
1211   template <typename T>
1212   HasTemplateCons(const T&);
1213 };
1214 
has_trivial_default_constructor()1215 void has_trivial_default_constructor() {
1216   { int arr[T(__has_trivial_constructor(Int))]; }
1217   { int arr[T(__has_trivial_constructor(IntAr))]; }
1218   { int arr[T(__has_trivial_constructor(Union))]; }
1219   { int arr[T(__has_trivial_constructor(UnionAr))]; }
1220   { int arr[T(__has_trivial_constructor(POD))]; }
1221   { int arr[T(__has_trivial_constructor(Derives))]; }
1222   { int arr[T(__has_trivial_constructor(DerivesAr))]; }
1223   { int arr[T(__has_trivial_constructor(ConstIntAr))]; }
1224   { int arr[T(__has_trivial_constructor(ConstIntArAr))]; }
1225   { int arr[T(__has_trivial_constructor(HasDest))]; }
1226   { int arr[T(__has_trivial_constructor(HasPriv))]; }
1227   { int arr[T(__has_trivial_constructor(HasCopyAssign))]; }
1228   { int arr[T(__has_trivial_constructor(HasMoveAssign))]; }
1229   { int arr[T(__has_trivial_constructor(const Int))]; }
1230   { int arr[T(__has_trivial_constructor(AllDefaulted))]; }
1231   { int arr[T(__has_trivial_constructor(AllDeleted))]; }
1232 
1233   { int arr[F(__has_trivial_constructor(HasCons))]; }
1234   { int arr[F(__has_trivial_constructor(HasRef))]; }
1235   { int arr[F(__has_trivial_constructor(HasCopy))]; }
1236   { int arr[F(__has_trivial_constructor(IntRef))]; }
1237   { int arr[F(__has_trivial_constructor(VirtAr))]; }
1238   { int arr[F(__has_trivial_constructor(void))]; }
1239   { int arr[F(__has_trivial_constructor(cvoid))]; }
1240   { int arr[F(__has_trivial_constructor(HasTemplateCons))]; }
1241   { int arr[F(__has_trivial_constructor(AllPrivate))]; }
1242   { int arr[F(__has_trivial_constructor(ExtDefaulted))]; }
1243 }
1244 
has_trivial_move_constructor()1245 void has_trivial_move_constructor() {
1246   // n3376 12.8 [class.copy]/12
1247   // A copy/move constructor for class X is trivial if it is not
1248   // user-provided, its declared parameter type is the same as
1249   // if it had been implicitly declared, and if
1250   //   � class X has no virtual functions (10.3) and no virtual
1251   //     base classes (10.1), and
1252   //   � the constructor selected to copy/move each direct base
1253   //     class subobject is trivial, and
1254   //   � for each non-static data member of X that is of class
1255   //     type (or array thereof), the constructor selected
1256   //     to copy/move that member is trivial;
1257   // otherwise the copy/move constructor is non-trivial.
1258   { int arr[T(__has_trivial_move_constructor(POD))]; }
1259   { int arr[T(__has_trivial_move_constructor(Union))]; }
1260   { int arr[T(__has_trivial_move_constructor(HasCons))]; }
1261   { int arr[T(__has_trivial_move_constructor(HasStaticMemberMoveCtor))]; }
1262   { int arr[T(__has_trivial_move_constructor(AllDeleted))]; }
1263 
1264   { int arr[F(__has_trivial_move_constructor(HasVirt))]; }
1265   { int arr[F(__has_trivial_move_constructor(DerivesVirt))]; }
1266   { int arr[F(__has_trivial_move_constructor(HasMoveCtor))]; }
1267   { int arr[F(__has_trivial_move_constructor(DerivesHasMoveCtor))]; }
1268   { int arr[F(__has_trivial_move_constructor(HasMemberMoveCtor))]; }
1269 }
1270 
has_trivial_copy_constructor()1271 void has_trivial_copy_constructor() {
1272   { int arr[T(__has_trivial_copy(Int))]; }
1273   { int arr[T(__has_trivial_copy(IntAr))]; }
1274   { int arr[T(__has_trivial_copy(Union))]; }
1275   { int arr[T(__has_trivial_copy(UnionAr))]; }
1276   { int arr[T(__has_trivial_copy(POD))]; }
1277   { int arr[T(__has_trivial_copy(Derives))]; }
1278   { int arr[T(__has_trivial_copy(ConstIntAr))]; }
1279   { int arr[T(__has_trivial_copy(ConstIntArAr))]; }
1280   { int arr[T(__has_trivial_copy(HasDest))]; }
1281   { int arr[T(__has_trivial_copy(HasPriv))]; }
1282   { int arr[T(__has_trivial_copy(HasCons))]; }
1283   { int arr[T(__has_trivial_copy(HasRef))]; }
1284   { int arr[T(__has_trivial_copy(HasMove))]; }
1285   { int arr[T(__has_trivial_copy(IntRef))]; }
1286   { int arr[T(__has_trivial_copy(HasCopyAssign))]; }
1287   { int arr[T(__has_trivial_copy(HasMoveAssign))]; }
1288   { int arr[T(__has_trivial_copy(const Int))]; }
1289   { int arr[T(__has_trivial_copy(AllDefaulted))]; }
1290   { int arr[T(__has_trivial_copy(AllDeleted))]; }
1291   { int arr[T(__has_trivial_copy(DerivesAr))]; }
1292   { int arr[T(__has_trivial_copy(DerivesHasRef))]; }
1293 
1294   { int arr[F(__has_trivial_copy(HasCopy))]; }
1295   { int arr[F(__has_trivial_copy(HasTemplateCons))]; }
1296   { int arr[F(__has_trivial_copy(VirtAr))]; }
1297   { int arr[F(__has_trivial_copy(void))]; }
1298   { int arr[F(__has_trivial_copy(cvoid))]; }
1299   { int arr[F(__has_trivial_copy(AllPrivate))]; }
1300   { int arr[F(__has_trivial_copy(ExtDefaulted))]; }
1301 }
1302 
has_trivial_copy_assignment()1303 void has_trivial_copy_assignment() {
1304   { int arr[T(__has_trivial_assign(Int))]; }
1305   { int arr[T(__has_trivial_assign(IntAr))]; }
1306   { int arr[T(__has_trivial_assign(Union))]; }
1307   { int arr[T(__has_trivial_assign(UnionAr))]; }
1308   { int arr[T(__has_trivial_assign(POD))]; }
1309   { int arr[T(__has_trivial_assign(Derives))]; }
1310   { int arr[T(__has_trivial_assign(HasDest))]; }
1311   { int arr[T(__has_trivial_assign(HasPriv))]; }
1312   { int arr[T(__has_trivial_assign(HasCons))]; }
1313   { int arr[T(__has_trivial_assign(HasRef))]; }
1314   { int arr[T(__has_trivial_assign(HasCopy))]; }
1315   { int arr[T(__has_trivial_assign(HasMove))]; }
1316   { int arr[T(__has_trivial_assign(HasMoveAssign))]; }
1317   { int arr[T(__has_trivial_assign(AllDefaulted))]; }
1318   { int arr[T(__has_trivial_assign(AllDeleted))]; }
1319   { int arr[T(__has_trivial_assign(DerivesAr))]; }
1320   { int arr[T(__has_trivial_assign(DerivesHasRef))]; }
1321 
1322   { int arr[F(__has_trivial_assign(IntRef))]; }
1323   { int arr[F(__has_trivial_assign(HasCopyAssign))]; }
1324   { int arr[F(__has_trivial_assign(const Int))]; }
1325   { int arr[F(__has_trivial_assign(ConstIntAr))]; }
1326   { int arr[F(__has_trivial_assign(ConstIntArAr))]; }
1327   { int arr[F(__has_trivial_assign(VirtAr))]; }
1328   { int arr[F(__has_trivial_assign(void))]; }
1329   { int arr[F(__has_trivial_assign(cvoid))]; }
1330   { int arr[F(__has_trivial_assign(AllPrivate))]; }
1331   { int arr[F(__has_trivial_assign(ExtDefaulted))]; }
1332 }
1333 
has_trivial_destructor()1334 void has_trivial_destructor() {
1335   { int arr[T(__has_trivial_destructor(Int))]; }
1336   { int arr[T(__has_trivial_destructor(IntAr))]; }
1337   { int arr[T(__has_trivial_destructor(Union))]; }
1338   { int arr[T(__has_trivial_destructor(UnionAr))]; }
1339   { int arr[T(__has_trivial_destructor(POD))]; }
1340   { int arr[T(__has_trivial_destructor(Derives))]; }
1341   { int arr[T(__has_trivial_destructor(ConstIntAr))]; }
1342   { int arr[T(__has_trivial_destructor(ConstIntArAr))]; }
1343   { int arr[T(__has_trivial_destructor(HasPriv))]; }
1344   { int arr[T(__has_trivial_destructor(HasCons))]; }
1345   { int arr[T(__has_trivial_destructor(HasRef))]; }
1346   { int arr[T(__has_trivial_destructor(HasCopy))]; }
1347   { int arr[T(__has_trivial_destructor(HasMove))]; }
1348   { int arr[T(__has_trivial_destructor(IntRef))]; }
1349   { int arr[T(__has_trivial_destructor(HasCopyAssign))]; }
1350   { int arr[T(__has_trivial_destructor(HasMoveAssign))]; }
1351   { int arr[T(__has_trivial_destructor(const Int))]; }
1352   { int arr[T(__has_trivial_destructor(DerivesAr))]; }
1353   { int arr[T(__has_trivial_destructor(VirtAr))]; }
1354   { int arr[T(__has_trivial_destructor(AllDefaulted))]; }
1355   { int arr[T(__has_trivial_destructor(AllDeleted))]; }
1356   { int arr[T(__has_trivial_destructor(DerivesHasRef))]; }
1357 
1358   { int arr[F(__has_trivial_destructor(HasDest))]; }
1359   { int arr[F(__has_trivial_destructor(void))]; }
1360   { int arr[F(__has_trivial_destructor(cvoid))]; }
1361   { int arr[F(__has_trivial_destructor(AllPrivate))]; }
1362   { int arr[F(__has_trivial_destructor(ExtDefaulted))]; }
1363 }
1364 
~AA1365 struct A { ~A() {} };
1366 template<typename> struct B : A { };
1367 
f()1368 void f() {
1369   { int arr[F(__has_trivial_destructor(A))]; }
1370   { int arr[F(__has_trivial_destructor(B<int>))]; }
1371 }
1372 
1373 class PR11110 {
1374   template <int> int operator=( int );
1375   int operator=(PR11110);
1376 };
1377 
1378 class UsingAssign;
1379 
1380 class UsingAssignBase {
1381 protected:
1382   UsingAssign &operator=(const UsingAssign&) throw();
1383 };
1384 
1385 class UsingAssign : public UsingAssignBase {
1386 public:
1387   using UsingAssignBase::operator=;
1388 };
1389 
has_nothrow_assign()1390 void has_nothrow_assign() {
1391   { int arr[T(__has_nothrow_assign(Int))]; }
1392   { int arr[T(__has_nothrow_assign(IntAr))]; }
1393   { int arr[T(__has_nothrow_assign(Union))]; }
1394   { int arr[T(__has_nothrow_assign(UnionAr))]; }
1395   { int arr[T(__has_nothrow_assign(POD))]; }
1396   { int arr[T(__has_nothrow_assign(Derives))]; }
1397   { int arr[T(__has_nothrow_assign(HasDest))]; }
1398   { int arr[T(__has_nothrow_assign(HasPriv))]; }
1399   { int arr[T(__has_nothrow_assign(HasCons))]; }
1400   { int arr[T(__has_nothrow_assign(HasRef))]; }
1401   { int arr[T(__has_nothrow_assign(HasCopy))]; }
1402   { int arr[T(__has_nothrow_assign(HasMove))]; }
1403   { int arr[T(__has_nothrow_assign(HasMoveAssign))]; }
1404   { int arr[T(__has_nothrow_assign(HasNoThrowCopyAssign))]; }
1405   { int arr[T(__has_nothrow_assign(HasMultipleNoThrowCopyAssign))]; }
1406   { int arr[T(__has_nothrow_assign(HasVirtDest))]; }
1407   { int arr[T(__has_nothrow_assign(AllPrivate))]; }
1408   { int arr[T(__has_nothrow_assign(UsingAssign))]; }
1409   { int arr[T(__has_nothrow_assign(DerivesAr))]; }
1410 
1411   { int arr[F(__has_nothrow_assign(IntRef))]; }
1412   { int arr[F(__has_nothrow_assign(HasCopyAssign))]; }
1413   { int arr[F(__has_nothrow_assign(HasMultipleCopyAssign))]; }
1414   { int arr[F(__has_nothrow_assign(const Int))]; }
1415   { int arr[F(__has_nothrow_assign(ConstIntAr))]; }
1416   { int arr[F(__has_nothrow_assign(ConstIntArAr))]; }
1417   { int arr[F(__has_nothrow_assign(VirtAr))]; }
1418   { int arr[F(__has_nothrow_assign(void))]; }
1419   { int arr[F(__has_nothrow_assign(cvoid))]; }
1420   { int arr[F(__has_nothrow_assign(PR11110))]; }
1421 }
1422 
has_nothrow_move_assign()1423 void has_nothrow_move_assign() {
1424   { int arr[T(__has_nothrow_move_assign(Int))]; }
1425   { int arr[T(__has_nothrow_move_assign(Enum))]; }
1426   { int arr[T(__has_nothrow_move_assign(Int*))]; }
1427   { int arr[T(__has_nothrow_move_assign(Enum POD::*))]; }
1428   { int arr[T(__has_nothrow_move_assign(POD))]; }
1429   { int arr[T(__has_nothrow_move_assign(HasPriv))]; }
1430   { int arr[T(__has_nothrow_move_assign(HasNoThrowMoveAssign))]; }
1431   { int arr[T(__has_nothrow_move_assign(HasNoExceptNoThrowMoveAssign))]; }
1432   { int arr[T(__has_nothrow_move_assign(HasMemberNoThrowMoveAssign))]; }
1433   { int arr[T(__has_nothrow_move_assign(HasMemberNoExceptNoThrowMoveAssign))]; }
1434   { int arr[T(__has_nothrow_move_assign(AllDeleted))]; }
1435 
1436 
1437   { int arr[F(__has_nothrow_move_assign(HasThrowMoveAssign))]; }
1438   { int arr[F(__has_nothrow_move_assign(HasNoExceptFalseMoveAssign))]; }
1439   { int arr[F(__has_nothrow_move_assign(HasMemberThrowMoveAssign))]; }
1440   { int arr[F(__has_nothrow_move_assign(HasMemberNoExceptFalseMoveAssign))]; }
1441   { int arr[F(__has_nothrow_move_assign(NoDefaultMoveAssignDueToUDCopyCtor))]; }
1442   { int arr[F(__has_nothrow_move_assign(NoDefaultMoveAssignDueToUDCopyAssign))]; }
1443   { int arr[F(__has_nothrow_move_assign(NoDefaultMoveAssignDueToDtor))]; }
1444 }
1445 
has_trivial_move_assign()1446 void has_trivial_move_assign() {
1447   // n3376 12.8 [class.copy]/25
1448   // A copy/move assignment operator for class X is trivial if it
1449   // is not user-provided, its declared parameter type is the same
1450   // as if it had been implicitly declared, and if:
1451   //  � class X has no virtual functions (10.3) and no virtual base
1452   //    classes (10.1), and
1453   //  � the assignment operator selected to copy/move each direct
1454   //    base class subobject is trivial, and
1455   //  � for each non-static data member of X that is of class type
1456   //    (or array thereof), the assignment operator
1457   //    selected to copy/move that member is trivial;
1458   { int arr[T(__has_trivial_move_assign(Int))]; }
1459   { int arr[T(__has_trivial_move_assign(HasStaticMemberMoveAssign))]; }
1460   { int arr[T(__has_trivial_move_assign(AllDeleted))]; }
1461 
1462   { int arr[F(__has_trivial_move_assign(HasVirt))]; }
1463   { int arr[F(__has_trivial_move_assign(DerivesVirt))]; }
1464   { int arr[F(__has_trivial_move_assign(HasMoveAssign))]; }
1465   { int arr[F(__has_trivial_move_assign(DerivesHasMoveAssign))]; }
1466   { int arr[F(__has_trivial_move_assign(HasMemberMoveAssign))]; }
1467   { int arr[F(__has_nothrow_move_assign(NoDefaultMoveAssignDueToUDCopyCtor))]; }
1468   { int arr[F(__has_nothrow_move_assign(NoDefaultMoveAssignDueToUDCopyAssign))]; }
1469 }
1470 
has_nothrow_copy()1471 void has_nothrow_copy() {
1472   { int arr[T(__has_nothrow_copy(Int))]; }
1473   { int arr[T(__has_nothrow_copy(IntAr))]; }
1474   { int arr[T(__has_nothrow_copy(Union))]; }
1475   { int arr[T(__has_nothrow_copy(UnionAr))]; }
1476   { int arr[T(__has_nothrow_copy(POD))]; }
1477   { int arr[T(__has_nothrow_copy(const Int))]; }
1478   { int arr[T(__has_nothrow_copy(ConstIntAr))]; }
1479   { int arr[T(__has_nothrow_copy(ConstIntArAr))]; }
1480   { int arr[T(__has_nothrow_copy(Derives))]; }
1481   { int arr[T(__has_nothrow_copy(IntRef))]; }
1482   { int arr[T(__has_nothrow_copy(HasDest))]; }
1483   { int arr[T(__has_nothrow_copy(HasPriv))]; }
1484   { int arr[T(__has_nothrow_copy(HasCons))]; }
1485   { int arr[T(__has_nothrow_copy(HasRef))]; }
1486   { int arr[T(__has_nothrow_copy(HasMove))]; }
1487   { int arr[T(__has_nothrow_copy(HasCopyAssign))]; }
1488   { int arr[T(__has_nothrow_copy(HasMoveAssign))]; }
1489   { int arr[T(__has_nothrow_copy(HasNoThrowCopy))]; }
1490   { int arr[T(__has_nothrow_copy(HasMultipleNoThrowCopy))]; }
1491   { int arr[T(__has_nothrow_copy(HasVirtDest))]; }
1492   { int arr[T(__has_nothrow_copy(HasTemplateCons))]; }
1493   { int arr[T(__has_nothrow_copy(AllPrivate))]; }
1494   { int arr[T(__has_nothrow_copy(DerivesAr))]; }
1495 
1496   { int arr[F(__has_nothrow_copy(HasCopy))]; }
1497   { int arr[F(__has_nothrow_copy(HasMultipleCopy))]; }
1498   { int arr[F(__has_nothrow_copy(VirtAr))]; }
1499   { int arr[F(__has_nothrow_copy(void))]; }
1500   { int arr[F(__has_nothrow_copy(cvoid))]; }
1501 }
1502 
has_nothrow_constructor()1503 void has_nothrow_constructor() {
1504   { int arr[T(__has_nothrow_constructor(Int))]; }
1505   { int arr[T(__has_nothrow_constructor(IntAr))]; }
1506   { int arr[T(__has_nothrow_constructor(Union))]; }
1507   { int arr[T(__has_nothrow_constructor(UnionAr))]; }
1508   { int arr[T(__has_nothrow_constructor(POD))]; }
1509   { int arr[T(__has_nothrow_constructor(Derives))]; }
1510   { int arr[T(__has_nothrow_constructor(DerivesAr))]; }
1511   { int arr[T(__has_nothrow_constructor(ConstIntAr))]; }
1512   { int arr[T(__has_nothrow_constructor(ConstIntArAr))]; }
1513   { int arr[T(__has_nothrow_constructor(HasDest))]; }
1514   { int arr[T(__has_nothrow_constructor(HasPriv))]; }
1515   { int arr[T(__has_nothrow_constructor(HasCopyAssign))]; }
1516   { int arr[T(__has_nothrow_constructor(const Int))]; }
1517   { int arr[T(__has_nothrow_constructor(HasNoThrowConstructor))]; }
1518   { int arr[T(__has_nothrow_constructor(HasVirtDest))]; }
1519   // { int arr[T(__has_nothrow_constructor(VirtAr))]; } // not implemented
1520   { int arr[T(__has_nothrow_constructor(AllPrivate))]; }
1521 
1522   { int arr[F(__has_nothrow_constructor(HasCons))]; }
1523   { int arr[F(__has_nothrow_constructor(HasRef))]; }
1524   { int arr[F(__has_nothrow_constructor(HasCopy))]; }
1525   { int arr[F(__has_nothrow_constructor(HasMove))]; }
1526   { int arr[F(__has_nothrow_constructor(HasNoThrowConstructorWithArgs))]; }
1527   { int arr[F(__has_nothrow_constructor(IntRef))]; }
1528   { int arr[F(__has_nothrow_constructor(void))]; }
1529   { int arr[F(__has_nothrow_constructor(cvoid))]; }
1530   { int arr[F(__has_nothrow_constructor(HasTemplateCons))]; }
1531 }
1532 
has_virtual_destructor()1533 void has_virtual_destructor() {
1534   { int arr[F(__has_virtual_destructor(Int))]; }
1535   { int arr[F(__has_virtual_destructor(IntAr))]; }
1536   { int arr[F(__has_virtual_destructor(Union))]; }
1537   { int arr[F(__has_virtual_destructor(UnionAr))]; }
1538   { int arr[F(__has_virtual_destructor(POD))]; }
1539   { int arr[F(__has_virtual_destructor(Derives))]; }
1540   { int arr[F(__has_virtual_destructor(DerivesAr))]; }
1541   { int arr[F(__has_virtual_destructor(const Int))]; }
1542   { int arr[F(__has_virtual_destructor(ConstIntAr))]; }
1543   { int arr[F(__has_virtual_destructor(ConstIntArAr))]; }
1544   { int arr[F(__has_virtual_destructor(HasDest))]; }
1545   { int arr[F(__has_virtual_destructor(HasPriv))]; }
1546   { int arr[F(__has_virtual_destructor(HasCons))]; }
1547   { int arr[F(__has_virtual_destructor(HasRef))]; }
1548   { int arr[F(__has_virtual_destructor(HasCopy))]; }
1549   { int arr[F(__has_virtual_destructor(HasMove))]; }
1550   { int arr[F(__has_virtual_destructor(HasCopyAssign))]; }
1551   { int arr[F(__has_virtual_destructor(HasMoveAssign))]; }
1552   { int arr[F(__has_virtual_destructor(IntRef))]; }
1553   { int arr[F(__has_virtual_destructor(VirtAr))]; }
1554 
1555   { int arr[T(__has_virtual_destructor(HasVirtDest))]; }
1556   { int arr[T(__has_virtual_destructor(DerivedVirtDest))]; }
1557   { int arr[F(__has_virtual_destructor(VirtDestAr))]; }
1558   { int arr[F(__has_virtual_destructor(void))]; }
1559   { int arr[F(__has_virtual_destructor(cvoid))]; }
1560   { int arr[F(__has_virtual_destructor(AllPrivate))]; }
1561 }
1562 
1563 
1564 class Base {};
1565 class Derived : Base {};
1566 class Derived2a : Derived {};
1567 class Derived2b : Derived {};
1568 class Derived3 : virtual Derived2a, virtual Derived2b {};
1569 template<typename T> struct BaseA { T a;  };
1570 template<typename T> struct DerivedB : BaseA<T> { };
1571 template<typename T> struct CrazyDerived : T { };
1572 
1573 
1574 class class_forward; // expected-note {{forward declaration of 'class_forward'}}
1575 
1576 template <typename Base, typename Derived>
isBaseOfT()1577 void isBaseOfT() {
1578   int t[T(__is_base_of(Base, Derived))];
1579 };
1580 template <typename Base, typename Derived>
isBaseOfF()1581 void isBaseOfF() {
1582   int t[F(__is_base_of(Base, Derived))];
1583 };
1584 
1585 template <class T> class DerivedTemp : Base {};
1586 template <class T> class NonderivedTemp {};
1587 template <class T> class UndefinedTemp; // expected-note {{declared here}}
1588 
is_base_of()1589 void is_base_of() {
1590   { int arr[T(__is_base_of(Base, Derived))]; }
1591   { int arr[T(__is_base_of(const Base, Derived))]; }
1592   { int arr[F(__is_base_of(Derived, Base))]; }
1593   { int arr[F(__is_base_of(Derived, int))]; }
1594   { int arr[T(__is_base_of(Base, Base))]; }
1595   { int arr[T(__is_base_of(Base, Derived3))]; }
1596   { int arr[T(__is_base_of(Derived, Derived3))]; }
1597   { int arr[T(__is_base_of(Derived2b, Derived3))]; }
1598   { int arr[T(__is_base_of(Derived2a, Derived3))]; }
1599   { int arr[T(__is_base_of(BaseA<int>, DerivedB<int>))]; }
1600   { int arr[F(__is_base_of(DerivedB<int>, BaseA<int>))]; }
1601   { int arr[T(__is_base_of(Base, CrazyDerived<Base>))]; }
1602   { int arr[F(__is_base_of(Union, Union))]; }
1603   { int arr[T(__is_base_of(Empty, Empty))]; }
1604   { int arr[T(__is_base_of(class_forward, class_forward))]; }
1605   { int arr[F(__is_base_of(Empty, class_forward))]; } // expected-error {{incomplete type 'class_forward' used in type trait expression}}
1606   { int arr[F(__is_base_of(Base&, Derived&))]; }
1607   int t18[F(__is_base_of(Base[10], Derived[10]))];
1608   { int arr[F(__is_base_of(int, int))]; }
1609   { int arr[F(__is_base_of(long, int))]; }
1610   { int arr[T(__is_base_of(Base, DerivedTemp<int>))]; }
1611   { int arr[F(__is_base_of(Base, NonderivedTemp<int>))]; }
1612   { int arr[F(__is_base_of(Base, UndefinedTemp<int>))]; } // expected-error {{implicit instantiation of undefined template 'UndefinedTemp<int>'}}
1613 
1614   isBaseOfT<Base, Derived>();
1615   isBaseOfF<Derived, Base>();
1616 
1617   isBaseOfT<Base, CrazyDerived<Base> >();
1618   isBaseOfF<CrazyDerived<Base>, Base>();
1619 
1620   isBaseOfT<BaseA<int>, DerivedB<int> >();
1621   isBaseOfF<DerivedB<int>, BaseA<int> >();
1622 }
1623 
1624 template<class T, class U>
1625 class TemplateClass {};
1626 
1627 template<class T>
1628 using TemplateAlias = TemplateClass<T, int>;
1629 
1630 typedef class Base BaseTypedef;
1631 
is_same()1632 void is_same()
1633 {
1634   int t01[T(__is_same(Base, Base))];
1635   int t02[T(__is_same(Base, BaseTypedef))];
1636   int t03[T(__is_same(TemplateClass<int, int>, TemplateAlias<int>))];
1637 
1638   int t10[F(__is_same(Base, const Base))];
1639   int t11[F(__is_same(Base, Base&))];
1640   int t12[F(__is_same(Base, Derived))];
1641 }
1642 
1643 struct IntWrapper
1644 {
1645   int value;
IntWrapperIntWrapper1646   IntWrapper(int _value) : value(_value) {}
operator intIntWrapper1647   operator int() const {
1648     return value;
1649   }
1650 };
1651 
1652 struct FloatWrapper
1653 {
1654   float value;
FloatWrapperFloatWrapper1655   FloatWrapper(float _value) : value(_value) {}
FloatWrapperFloatWrapper1656   FloatWrapper(const IntWrapper& obj)
1657     : value(static_cast<float>(obj.value)) {}
operator floatFloatWrapper1658   operator float() const {
1659     return value;
1660   }
operator IntWrapperFloatWrapper1661   operator IntWrapper() const {
1662     return IntWrapper(static_cast<int>(value));
1663   }
1664 };
1665 
is_convertible()1666 void is_convertible()
1667 {
1668   int t01[T(__is_convertible(IntWrapper, IntWrapper))];
1669   int t02[T(__is_convertible(IntWrapper, const IntWrapper))];
1670   int t03[T(__is_convertible(IntWrapper, int))];
1671   int t04[T(__is_convertible(int, IntWrapper))];
1672   int t05[T(__is_convertible(IntWrapper, FloatWrapper))];
1673   int t06[T(__is_convertible(FloatWrapper, IntWrapper))];
1674   int t07[T(__is_convertible(FloatWrapper, float))];
1675   int t08[T(__is_convertible(float, FloatWrapper))];
1676 }
1677 
1678 struct FromInt { FromInt(int); };
1679 struct ToInt { operator int(); };
1680 typedef void Function();
1681 
1682 void is_convertible_to();
1683 class PrivateCopy {
1684   PrivateCopy(const PrivateCopy&);
1685   friend void is_convertible_to();
1686 };
1687 
1688 template<typename T>
1689 struct X0 {
1690   template<typename U> X0(const X0<U>&);
1691 };
1692 
1693 struct Abstract { virtual void f() = 0; };
1694 
is_convertible_to()1695 void is_convertible_to() {
1696   { int arr[T(__is_convertible_to(Int, Int))]; }
1697   { int arr[F(__is_convertible_to(Int, IntAr))]; }
1698   { int arr[F(__is_convertible_to(IntAr, IntAr))]; }
1699   { int arr[T(__is_convertible_to(void, void))]; }
1700   { int arr[T(__is_convertible_to(cvoid, void))]; }
1701   { int arr[T(__is_convertible_to(void, cvoid))]; }
1702   { int arr[T(__is_convertible_to(cvoid, cvoid))]; }
1703   { int arr[T(__is_convertible_to(int, FromInt))]; }
1704   { int arr[T(__is_convertible_to(long, FromInt))]; }
1705   { int arr[T(__is_convertible_to(double, FromInt))]; }
1706   { int arr[T(__is_convertible_to(const int, FromInt))]; }
1707   { int arr[T(__is_convertible_to(const int&, FromInt))]; }
1708   { int arr[T(__is_convertible_to(ToInt, int))]; }
1709   { int arr[T(__is_convertible_to(ToInt, const int&))]; }
1710   { int arr[T(__is_convertible_to(ToInt, long))]; }
1711   { int arr[F(__is_convertible_to(ToInt, int&))]; }
1712   { int arr[F(__is_convertible_to(ToInt, FromInt))]; }
1713   { int arr[T(__is_convertible_to(IntAr&, IntAr&))]; }
1714   { int arr[T(__is_convertible_to(IntAr&, const IntAr&))]; }
1715   { int arr[F(__is_convertible_to(const IntAr&, IntAr&))]; }
1716   { int arr[F(__is_convertible_to(Function, Function))]; }
1717   { int arr[F(__is_convertible_to(PrivateCopy, PrivateCopy))]; }
1718   { int arr[T(__is_convertible_to(X0<int>, X0<float>))]; }
1719   { int arr[F(__is_convertible_to(Abstract, Abstract))]; }
1720 }
1721 
1722 namespace is_convertible_to_instantiate {
1723   // Make sure we don't try to instantiate the constructor.
A(int)1724   template<int x> class A { A(int) { int a[x]; } };
1725   int x = __is_convertible_to(int, A<-1>);
1726 }
1727 
is_trivial()1728 void is_trivial()
1729 {
1730   { int arr[T(__is_trivial(int))]; }
1731   { int arr[T(__is_trivial(Enum))]; }
1732   { int arr[T(__is_trivial(POD))]; }
1733   { int arr[T(__is_trivial(Int))]; }
1734   { int arr[T(__is_trivial(IntAr))]; }
1735   { int arr[T(__is_trivial(IntArNB))]; }
1736   { int arr[T(__is_trivial(Statics))]; }
1737   { int arr[T(__is_trivial(Empty))]; }
1738   { int arr[T(__is_trivial(EmptyUnion))]; }
1739   { int arr[T(__is_trivial(Union))]; }
1740   { int arr[T(__is_trivial(Derives))]; }
1741   { int arr[T(__is_trivial(DerivesAr))]; }
1742   { int arr[T(__is_trivial(DerivesArNB))]; }
1743   { int arr[T(__is_trivial(DerivesEmpty))]; }
1744   { int arr[T(__is_trivial(HasFunc))]; }
1745   { int arr[T(__is_trivial(HasOp))]; }
1746   { int arr[T(__is_trivial(HasConv))]; }
1747   { int arr[T(__is_trivial(HasAssign))]; }
1748   { int arr[T(__is_trivial(HasAnonymousUnion))]; }
1749   { int arr[T(__is_trivial(HasPriv))]; }
1750   { int arr[T(__is_trivial(HasProt))]; }
1751   { int arr[T(__is_trivial(DerivesHasPriv))]; }
1752   { int arr[T(__is_trivial(DerivesHasProt))]; }
1753   { int arr[T(__is_trivial(Vector))]; }
1754   { int arr[T(__is_trivial(VectorExt))]; }
1755 
1756   { int arr[F(__is_trivial(HasCons))]; }
1757   { int arr[F(__is_trivial(HasCopyAssign))]; }
1758   { int arr[F(__is_trivial(HasMoveAssign))]; }
1759   { int arr[F(__is_trivial(HasDest))]; }
1760   { int arr[F(__is_trivial(HasRef))]; }
1761   { int arr[F(__is_trivial(HasNonPOD))]; }
1762   { int arr[F(__is_trivial(HasVirt))]; }
1763   { int arr[F(__is_trivial(DerivesHasCons))]; }
1764   { int arr[F(__is_trivial(DerivesHasCopyAssign))]; }
1765   { int arr[F(__is_trivial(DerivesHasMoveAssign))]; }
1766   { int arr[F(__is_trivial(DerivesHasDest))]; }
1767   { int arr[F(__is_trivial(DerivesHasRef))]; }
1768   { int arr[F(__is_trivial(DerivesHasVirt))]; }
1769   { int arr[F(__is_trivial(void))]; }
1770   { int arr[F(__is_trivial(cvoid))]; }
1771 }
1772 
trivial_checks()1773 void trivial_checks()
1774 {
1775   { int arr[T(__is_trivially_copyable(int))]; }
1776   { int arr[T(__is_trivially_copyable(Enum))]; }
1777   { int arr[T(__is_trivially_copyable(POD))]; }
1778   { int arr[T(__is_trivially_copyable(Int))]; }
1779   { int arr[T(__is_trivially_copyable(IntAr))]; }
1780   { int arr[T(__is_trivially_copyable(IntArNB))]; }
1781   { int arr[T(__is_trivially_copyable(Statics))]; }
1782   { int arr[T(__is_trivially_copyable(Empty))]; }
1783   { int arr[T(__is_trivially_copyable(EmptyUnion))]; }
1784   { int arr[T(__is_trivially_copyable(Union))]; }
1785   { int arr[T(__is_trivially_copyable(Derives))]; }
1786   { int arr[T(__is_trivially_copyable(DerivesAr))]; }
1787   { int arr[T(__is_trivially_copyable(DerivesArNB))]; }
1788   { int arr[T(__is_trivially_copyable(DerivesEmpty))]; }
1789   { int arr[T(__is_trivially_copyable(HasFunc))]; }
1790   { int arr[T(__is_trivially_copyable(HasOp))]; }
1791   { int arr[T(__is_trivially_copyable(HasConv))]; }
1792   { int arr[T(__is_trivially_copyable(HasAssign))]; }
1793   { int arr[T(__is_trivially_copyable(HasAnonymousUnion))]; }
1794   { int arr[T(__is_trivially_copyable(HasPriv))]; }
1795   { int arr[T(__is_trivially_copyable(HasProt))]; }
1796   { int arr[T(__is_trivially_copyable(DerivesHasPriv))]; }
1797   { int arr[T(__is_trivially_copyable(DerivesHasProt))]; }
1798   { int arr[T(__is_trivially_copyable(Vector))]; }
1799   { int arr[T(__is_trivially_copyable(VectorExt))]; }
1800   { int arr[T(__is_trivially_copyable(HasCons))]; }
1801   { int arr[T(__is_trivially_copyable(HasRef))]; }
1802   { int arr[T(__is_trivially_copyable(HasNonPOD))]; }
1803   { int arr[T(__is_trivially_copyable(DerivesHasCons))]; }
1804   { int arr[T(__is_trivially_copyable(DerivesHasRef))]; }
1805 
1806   { int arr[F(__is_trivially_copyable(HasCopyAssign))]; }
1807   { int arr[F(__is_trivially_copyable(HasMoveAssign))]; }
1808   { int arr[F(__is_trivially_copyable(HasDest))]; }
1809   { int arr[F(__is_trivially_copyable(HasVirt))]; }
1810   { int arr[F(__is_trivially_copyable(DerivesHasCopyAssign))]; }
1811   { int arr[F(__is_trivially_copyable(DerivesHasMoveAssign))]; }
1812   { int arr[F(__is_trivially_copyable(DerivesHasDest))]; }
1813   { int arr[F(__is_trivially_copyable(DerivesHasVirt))]; }
1814   { int arr[F(__is_trivially_copyable(void))]; }
1815   { int arr[F(__is_trivially_copyable(cvoid))]; }
1816 
1817   { int arr[T((__is_trivially_constructible(int)))]; }
1818   { int arr[T((__is_trivially_constructible(int, int)))]; }
1819   { int arr[T((__is_trivially_constructible(int, float)))]; }
1820   { int arr[T((__is_trivially_constructible(int, int&)))]; }
1821   { int arr[T((__is_trivially_constructible(int, const int&)))]; }
1822   { int arr[T((__is_trivially_constructible(int, int)))]; }
1823   { int arr[T((__is_trivially_constructible(HasCopyAssign, HasCopyAssign)))]; }
1824   { int arr[T((__is_trivially_constructible(HasCopyAssign, const HasCopyAssign&)))]; }
1825   { int arr[T((__is_trivially_constructible(HasCopyAssign, HasCopyAssign&&)))]; }
1826   { int arr[T((__is_trivially_constructible(HasCopyAssign)))]; }
1827   { int arr[T((__is_trivially_constructible(NonTrivialDefault,
1828                                             const NonTrivialDefault&)))]; }
1829   { int arr[T((__is_trivially_constructible(NonTrivialDefault,
1830                                             NonTrivialDefault&&)))]; }
1831   { int arr[T((__is_trivially_constructible(AllDefaulted)))]; }
1832   { int arr[T((__is_trivially_constructible(AllDefaulted,
1833                                             const AllDefaulted &)))]; }
1834   { int arr[T((__is_trivially_constructible(AllDefaulted,
1835                                             AllDefaulted &&)))]; }
1836 
1837   { int arr[F((__is_trivially_constructible(int, int*)))]; }
1838   { int arr[F((__is_trivially_constructible(NonTrivialDefault)))]; }
1839   { int arr[F((__is_trivially_constructible(ThreeArgCtor, int*, char*, int&)))]; }
1840   { int arr[F((__is_trivially_constructible(AllDeleted)))]; }
1841   { int arr[F((__is_trivially_constructible(AllDeleted,
1842                                             const AllDeleted &)))]; }
1843   { int arr[F((__is_trivially_constructible(AllDeleted,
1844                                             AllDeleted &&)))]; }
1845   { int arr[F((__is_trivially_constructible(ExtDefaulted)))]; }
1846   { int arr[F((__is_trivially_constructible(ExtDefaulted,
1847                                             const ExtDefaulted &)))]; }
1848   { int arr[F((__is_trivially_constructible(ExtDefaulted,
1849                                             ExtDefaulted &&)))]; }
1850 
1851   { int arr[T((__is_trivially_assignable(int&, int)))]; }
1852   { int arr[T((__is_trivially_assignable(int&, int&)))]; }
1853   { int arr[T((__is_trivially_assignable(int&, int&&)))]; }
1854   { int arr[T((__is_trivially_assignable(int&, const int&)))]; }
1855   { int arr[T((__is_trivially_assignable(POD&, POD)))]; }
1856   { int arr[T((__is_trivially_assignable(POD&, POD&)))]; }
1857   { int arr[T((__is_trivially_assignable(POD&, POD&&)))]; }
1858   { int arr[T((__is_trivially_assignable(POD&, const POD&)))]; }
1859   { int arr[T((__is_trivially_assignable(int*&, int*)))]; }
1860   { int arr[T((__is_trivially_assignable(AllDefaulted,
1861                                          const AllDefaulted &)))]; }
1862   { int arr[T((__is_trivially_assignable(AllDefaulted,
1863                                          AllDefaulted &&)))]; }
1864 
1865   { int arr[F((__is_trivially_assignable(int*&, float*)))]; }
1866   { int arr[F((__is_trivially_assignable(HasCopyAssign&, HasCopyAssign)))]; }
1867   { int arr[F((__is_trivially_assignable(HasCopyAssign&, HasCopyAssign&)))]; }
1868   { int arr[F((__is_trivially_assignable(HasCopyAssign&, const HasCopyAssign&)))]; }
1869   { int arr[F((__is_trivially_assignable(HasCopyAssign&, HasCopyAssign&&)))]; }
1870   { int arr[F((__is_trivially_assignable(TrivialMoveButNotCopy&,
1871                                         TrivialMoveButNotCopy&)))]; }
1872   { int arr[F((__is_trivially_assignable(TrivialMoveButNotCopy&,
1873                                         const TrivialMoveButNotCopy&)))]; }
1874   { int arr[F((__is_trivially_assignable(AllDeleted,
1875                                          const AllDeleted &)))]; }
1876   { int arr[F((__is_trivially_assignable(AllDeleted,
1877                                          AllDeleted &&)))]; }
1878   { int arr[F((__is_trivially_assignable(ExtDefaulted,
1879                                          const ExtDefaulted &)))]; }
1880   { int arr[F((__is_trivially_assignable(ExtDefaulted,
1881                                          ExtDefaulted &&)))]; }
1882 
1883   { int arr[T((__is_trivially_assignable(HasDefaultTrivialCopyAssign&,
1884                                          HasDefaultTrivialCopyAssign&)))]; }
1885   { int arr[T((__is_trivially_assignable(HasDefaultTrivialCopyAssign&,
1886                                        const HasDefaultTrivialCopyAssign&)))]; }
1887   { int arr[T((__is_trivially_assignable(TrivialMoveButNotCopy&,
1888                                          TrivialMoveButNotCopy)))]; }
1889   { int arr[T((__is_trivially_assignable(TrivialMoveButNotCopy&,
1890                                          TrivialMoveButNotCopy&&)))]; }
1891 }
1892 
1893 // Instantiation of __is_trivially_constructible
1894 template<typename T, typename ...Args>
1895 struct is_trivially_constructible {
1896   static const bool value = __is_trivially_constructible(T, Args...);
1897 };
1898 
is_trivially_constructible_test()1899 void is_trivially_constructible_test() {
1900   { int arr[T((is_trivially_constructible<int>::value))]; }
1901   { int arr[T((is_trivially_constructible<int, int>::value))]; }
1902   { int arr[T((is_trivially_constructible<int, float>::value))]; }
1903   { int arr[T((is_trivially_constructible<int, int&>::value))]; }
1904   { int arr[T((is_trivially_constructible<int, const int&>::value))]; }
1905   { int arr[T((is_trivially_constructible<int, int>::value))]; }
1906   { int arr[T((is_trivially_constructible<HasCopyAssign, HasCopyAssign>::value))]; }
1907   { int arr[T((is_trivially_constructible<HasCopyAssign, const HasCopyAssign&>::value))]; }
1908   { int arr[T((is_trivially_constructible<HasCopyAssign, HasCopyAssign&&>::value))]; }
1909   { int arr[T((is_trivially_constructible<HasCopyAssign>::value))]; }
1910   { int arr[T((is_trivially_constructible<NonTrivialDefault,
1911                                             const NonTrivialDefault&>::value))]; }
1912   { int arr[T((is_trivially_constructible<NonTrivialDefault,
1913                                             NonTrivialDefault&&>::value))]; }
1914 
1915   { int arr[F((is_trivially_constructible<int, int*>::value))]; }
1916   { int arr[F((is_trivially_constructible<NonTrivialDefault>::value))]; }
1917   { int arr[F((is_trivially_constructible<ThreeArgCtor, int*, char*, int&>::value))]; }
1918 }
1919 
array_rank()1920 void array_rank() {
1921   int t01[T(__array_rank(IntAr) == 1)];
1922   int t02[T(__array_rank(ConstIntArAr) == 2)];
1923 }
1924 
array_extent()1925 void array_extent() {
1926   int t01[T(__array_extent(IntAr, 0) == 10)];
1927   int t02[T(__array_extent(ConstIntArAr, 0) == 4)];
1928   int t03[T(__array_extent(ConstIntArAr, 1) == 10)];
1929 }
1930