1/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2|* *|
3|* Type and expression traits *|
4|* *|
5|* Automatically generated file, do not edit! *|
6|* From: Traits.td *|
7|* *|
8\*===----------------------------------------------------------------------===*/
9
10#if defined(EMIT_ENUMS)
11/// Names for traits that operate specifically on types.
12enum TypeTrait {
13 UTT_IsInterfaceClass,
14 UTT_IsSealed,
15 UTT_IsDestructible,
16 UTT_IsTriviallyDestructible,
17 UTT_IsNothrowDestructible,
18 UTT_HasNothrowMoveAssign,
19 UTT_HasTrivialMoveAssign,
20 UTT_HasTrivialMoveConstructor,
21 UTT_IsImplicitLifetime,
22 UTT_HasNothrowAssign,
23 UTT_HasNothrowCopy,
24 UTT_HasNothrowConstructor,
25 UTT_HasTrivialAssign,
26 UTT_HasTrivialCopy,
27 UTT_HasTrivialDefaultConstructor,
28 UTT_HasTrivialDestructor,
29 UTT_HasVirtualDestructor,
30 UTT_IsAbstract,
31 UTT_IsAggregate,
32 UTT_IsClass,
33 UTT_IsEmpty,
34 UTT_IsEnum,
35 UTT_IsFinal,
36 UTT_IsLiteral,
37 UTT_IsPOD,
38 UTT_IsPolymorphic,
39 UTT_IsStandardLayout,
40 UTT_IsTrivial,
41 UTT_IsTriviallyCopyable,
42 UTT_IsUnion,
43 UTT_HasUniqueObjectRepresentations,
44 UTT_IsTriviallyEqualityComparable,
45 UTT_IsBoundedArray,
46 UTT_IsUnboundedArray,
47 UTT_IsScopedEnum,
48 UTT_CanPassInRegs,
49 UTT_IsCppTriviallyRelocatable,
50 UTT_IsTriviallyRelocatable,
51 UTT_IsBitwiseCloneable,
52 UTT_StructuredBindingSize,
53 UTT_IsArithmetic,
54 UTT_IsFloatingPoint,
55 UTT_IsIntegral,
56 UTT_IsCompleteType,
57 UTT_IsVoid,
58 UTT_IsArray,
59 UTT_IsFunction,
60 UTT_IsReference,
61 UTT_IsLvalueReference,
62 UTT_IsRvalueReference,
63 UTT_IsFundamental,
64 UTT_IsObject,
65 UTT_IsScalar,
66 UTT_IsCompound,
67 UTT_IsPointer,
68 UTT_IsMemberObjectPointer,
69 UTT_IsMemberFunctionPointer,
70 UTT_IsMemberPointer,
71 UTT_IsConst,
72 UTT_IsVolatile,
73 UTT_IsSigned,
74 UTT_IsUnsigned,
75 UTT_IsIntangibleType,
76 UTT_IsTypedResourceElementCompatible,
77 UTT_IsConstantBufferElementCompatible,
78 UTT_Last = 64, // UTT_Last == last UTT_XX in the enum.
79 BTT_TypeCompatible,
80 BTT_IsNothrowAssignable,
81 BTT_IsAssignable,
82 BTT_IsVirtualBaseOf,
83 BTT_IsBaseOf,
84 BTT_IsConvertibleTo,
85 BTT_IsTriviallyAssignable,
86 BTT_IsLayoutCompatible,
87 BTT_IsPointerInterconvertibleBaseOf,
88 BTT_ReferenceBindsToTemporary,
89 BTT_ReferenceConstructsFromTemporary,
90 BTT_ReferenceConvertsFromTemporary,
91 BTT_LtSynthesizesFromSpaceship,
92 BTT_LeSynthesizesFromSpaceship,
93 BTT_GtSynthesizesFromSpaceship,
94 BTT_GeSynthesizesFromSpaceship,
95 BTT_IsDeducible,
96 BTT_IsSame,
97 BTT_IsConvertible,
98 BTT_IsNothrowConvertible,
99 BTT_IsScalarizedLayoutCompatible,
100 BTT_Last = 85, // BTT_Last == last BTT_XX in the enum.
101 TT_IsConstructible,
102 TT_IsNothrowConstructible,
103 TT_IsTriviallyConstructible,
104 TT_Last = 88 // TT_Last == last TT_XX in the enum.
105};
106
107/// Names for the array type traits.
108enum ArrayTypeTrait {
109 ATT_ArrayRank,
110 ATT_ArrayExtent,
111 ATT_Last = 1 // ATT_Last == last ATT
112};
113
114/// Names for the "expression or type" traits.
115enum UnaryExprOrTypeTrait {
116 UETT_SizeOf,
117 UETT_DataSizeOf,
118 UETT_CountOf,
119 UETT_PreferredAlignOf,
120 UETT_PtrAuthTypeDiscriminator,
121 UETT_VecStep,
122 UETT_OpenMPRequiredSimdAlign,
123 UETT_VectorElements,
124 UETT_AlignOf,
125 UETT_Last = 8 // UETT_Last == last UETT_XX in the enum.
126};
127
128#elif defined(EMIT_ARRAYS)
129static constexpr const char *TypeTraitNames[] = {
130 "IsInterfaceClass",
131 "IsSealed",
132 "IsDestructible",
133 "IsTriviallyDestructible",
134 "IsNothrowDestructible",
135 "HasNothrowMoveAssign",
136 "HasTrivialMoveAssign",
137 "HasTrivialMoveConstructor",
138 "IsImplicitLifetime",
139 "HasNothrowAssign",
140 "HasNothrowCopy",
141 "HasNothrowConstructor",
142 "HasTrivialAssign",
143 "HasTrivialCopy",
144 "HasTrivialDefaultConstructor",
145 "HasTrivialDestructor",
146 "HasVirtualDestructor",
147 "IsAbstract",
148 "IsAggregate",
149 "IsClass",
150 "IsEmpty",
151 "IsEnum",
152 "IsFinal",
153 "IsLiteral",
154 "IsPOD",
155 "IsPolymorphic",
156 "IsStandardLayout",
157 "IsTrivial",
158 "IsTriviallyCopyable",
159 "IsUnion",
160 "HasUniqueObjectRepresentations",
161 "IsTriviallyEqualityComparable",
162 "IsBoundedArray",
163 "IsUnboundedArray",
164 "IsScopedEnum",
165 "CanPassInRegs",
166 "IsCppTriviallyRelocatable",
167 "IsTriviallyRelocatable",
168 "IsBitwiseCloneable",
169 "StructuredBindingSize",
170 "IsArithmetic",
171 "IsFloatingPoint",
172 "IsIntegral",
173 "IsCompleteType",
174 "IsVoid",
175 "IsArray",
176 "IsFunction",
177 "IsReference",
178 "IsLvalueReference",
179 "IsRvalueReference",
180 "IsFundamental",
181 "IsObject",
182 "IsScalar",
183 "IsCompound",
184 "IsPointer",
185 "IsMemberObjectPointer",
186 "IsMemberFunctionPointer",
187 "IsMemberPointer",
188 "IsConst",
189 "IsVolatile",
190 "IsSigned",
191 "IsUnsigned",
192 "IsIntangibleType",
193 "IsTypedResourceElementCompatible",
194 "IsConstantBufferElementCompatible",
195 "TypeCompatible",
196 "IsNothrowAssignable",
197 "IsAssignable",
198 "IsVirtualBaseOf",
199 "IsBaseOf",
200 "IsConvertibleTo",
201 "IsTriviallyAssignable",
202 "IsLayoutCompatible",
203 "IsPointerInterconvertibleBaseOf",
204 "ReferenceBindsToTemporary",
205 "ReferenceConstructsFromTemporary",
206 "ReferenceConvertsFromTemporary",
207 "LtSynthesizesFromSpaceship",
208 "LeSynthesizesFromSpaceship",
209 "GtSynthesizesFromSpaceship",
210 "GeSynthesizesFromSpaceship",
211 "IsDeducible",
212 "IsSame",
213 "IsConvertible",
214 "IsNothrowConvertible",
215 "IsScalarizedLayoutCompatible",
216 "IsConstructible",
217 "IsNothrowConstructible",
218 "IsTriviallyConstructible",
219};
220
221static constexpr const char *TypeTraitSpellings[] = {
222 "__is_interface_class",
223 "__is_sealed",
224 "__is_destructible",
225 "__is_trivially_destructible",
226 "__is_nothrow_destructible",
227 "__has_nothrow_move_assign",
228 "__has_trivial_move_assign",
229 "__has_trivial_move_constructor",
230 "__builtin_is_implicit_lifetime",
231 "__has_nothrow_assign",
232 "__has_nothrow_copy",
233 "__has_nothrow_constructor",
234 "__has_trivial_assign",
235 "__has_trivial_copy",
236 "__has_trivial_constructor",
237 "__has_trivial_destructor",
238 "__has_virtual_destructor",
239 "__is_abstract",
240 "__is_aggregate",
241 "__is_class",
242 "__is_empty",
243 "__is_enum",
244 "__is_final",
245 "__is_literal",
246 "__is_pod",
247 "__is_polymorphic",
248 "__is_standard_layout",
249 "__is_trivial",
250 "__is_trivially_copyable",
251 "__is_union",
252 "__has_unique_object_representations",
253 "__is_trivially_equality_comparable",
254 "__is_bounded_array",
255 "__is_unbounded_array",
256 "__is_scoped_enum",
257 "__can_pass_in_regs",
258 "__builtin_is_cpp_trivially_relocatable",
259 "__is_trivially_relocatable",
260 "__is_bitwise_cloneable",
261 "__builtin_structured_binding_size",
262 "__is_arithmetic",
263 "__is_floating_point",
264 "__is_integral",
265 "__is_complete_type",
266 "__is_void",
267 "__is_array",
268 "__is_function",
269 "__is_reference",
270 "__is_lvalue_reference",
271 "__is_rvalue_reference",
272 "__is_fundamental",
273 "__is_object",
274 "__is_scalar",
275 "__is_compound",
276 "__is_pointer",
277 "__is_member_object_pointer",
278 "__is_member_function_pointer",
279 "__is_member_pointer",
280 "__is_const",
281 "__is_volatile",
282 "__is_signed",
283 "__is_unsigned",
284 "__builtin_hlsl_is_intangible",
285 "__builtin_hlsl_is_typed_resource_element_compatible",
286 "__builtin_hlsl_is_constant_buffer_element_compatible",
287 "__builtin_types_compatible_p",
288 "__is_nothrow_assignable",
289 "__is_assignable",
290 "__builtin_is_virtual_base_of",
291 "__is_base_of",
292 "__is_convertible_to",
293 "__is_trivially_assignable",
294 "__is_layout_compatible",
295 "__is_pointer_interconvertible_base_of",
296 "__reference_binds_to_temporary",
297 "__reference_constructs_from_temporary",
298 "__reference_converts_from_temporary",
299 "__builtin_lt_synthesizes_from_spaceship",
300 "__builtin_le_synthesizes_from_spaceship",
301 "__builtin_gt_synthesizes_from_spaceship",
302 "__builtin_ge_synthesizes_from_spaceship",
303 "",
304 "__is_same",
305 "__is_convertible",
306 "__is_nothrow_convertible",
307 "__builtin_hlsl_is_scalarized_layout_compatible",
308 "__is_constructible",
309 "__is_nothrow_constructible",
310 "__is_trivially_constructible",
311};
312
313static constexpr const unsigned TypeTraitArities[] = {
3141, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
3152, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
3160, 0, 0
317};
318
319static constexpr const char *ArrayTypeTraitNames[] = {
320 "ArrayRank",
321 "ArrayExtent",
322};
323
324static constexpr const char *ArrayTypeTraitSpellings[] = {
325 "__array_rank",
326 "__array_extent",
327};
328
329static constexpr const char *UnaryExprOrTypeTraitNames[] = {
330 "SizeOf",
331 "DataSizeOf",
332 "CountOf",
333 "PreferredAlignOf",
334 "PtrAuthTypeDiscriminator",
335 "VecStep",
336 "OpenMPRequiredSimdAlign",
337 "VectorElements",
338 "AlignOf",
339};
340
341static constexpr const char *UnaryExprOrTypeTraitSpellings[] = {
342 "sizeof",
343 "__datasizeof",
344 "_Countof",
345 "__alignof",
346 "__builtin_ptrauth_type_discriminator",
347 "vec_step",
348 "__builtin_omp_required_simd_align",
349 "__builtin_vectorelements",
350 "alignof",
351};
352
353#elif defined(EMIT_STD_NAME_CASES)
354 .Case("is_constructible", TypeTrait::TT_IsConstructible)
355 .Case("is_assignable", TypeTrait::BTT_IsAssignable)
356 .Case("is_abstract", TypeTrait::UTT_IsAbstract)
357 .Case("is_aggregate", TypeTrait::UTT_IsAggregate)
358 .Case("is_empty", TypeTrait::UTT_IsEmpty)
359 .Case("is_final", TypeTrait::UTT_IsFinal)
360 .Case("is_standard_layout", TypeTrait::UTT_IsStandardLayout)
361 .Case("is_trivially_copyable", TypeTrait::UTT_IsTriviallyCopyable)
362 .Case("is_trivially_relocatable", TypeTrait::UTT_IsCppTriviallyRelocatable)
363#else
364#ifndef TYPE_TRAIT_1
365#define TYPE_TRAIT_1(I,E,K)
366#endif
367#ifndef TYPE_TRAIT_2
368#define TYPE_TRAIT_2(I,E,K)
369#endif
370#ifndef TYPE_TRAIT_N
371#define TYPE_TRAIT_N(I,E,K)
372#endif
373#ifndef ARRAY_TYPE_TRAIT
374#define ARRAY_TYPE_TRAIT(I,E,K)
375#endif
376#ifndef UNARY_EXPR_OR_TYPE_TRAIT
377#define UNARY_EXPR_OR_TYPE_TRAIT(I,E,K)
378#endif
379#ifndef CXX11_UNARY_EXPR_OR_TYPE_TRAIT
380#define CXX11_UNARY_EXPR_OR_TYPE_TRAIT(I,E,K)
381#endif
382#ifndef EXPRESSION_TRAIT
383#define EXPRESSION_TRAIT(I,E,K)
384#endif
385#ifndef TRANSFORM_TYPE_TRAIT_DEF
386#define TRANSFORM_TYPE_TRAIT_DEF(K, Trait)
387#endif
388#ifndef ALIAS
389#define ALIAS(X,Y,Z)
390#endif
391
392UNARY_EXPR_OR_TYPE_TRAIT(sizeof, SizeOf, KEYALL)
393UNARY_EXPR_OR_TYPE_TRAIT(__datasizeof, DataSizeOf, KEYCXX)
394UNARY_EXPR_OR_TYPE_TRAIT(_Countof, CountOf, KEYNOCXX)
395CXX11_UNARY_EXPR_OR_TYPE_TRAIT(alignof, AlignOf, KEYC23)
396UNARY_EXPR_OR_TYPE_TRAIT(__alignof, PreferredAlignOf, KEYALL)
397TYPE_TRAIT_2(__builtin_types_compatible_p, TypeCompatible, KEYNOCXX)
398TYPE_TRAIT_1(__is_interface_class, IsInterfaceClass, KEYMS)
399TYPE_TRAIT_1(__is_sealed, IsSealed, KEYMS)
400TYPE_TRAIT_1(__is_destructible, IsDestructible, KEYALL)
401TYPE_TRAIT_1(__is_trivially_destructible, IsTriviallyDestructible, KEYCXX)
402TYPE_TRAIT_1(__is_nothrow_destructible, IsNothrowDestructible, KEYALL)
403TYPE_TRAIT_2(__is_nothrow_assignable, IsNothrowAssignable, KEYCXX)
404TYPE_TRAIT_N(__is_constructible, IsConstructible, KEYCXX)
405TYPE_TRAIT_N(__is_nothrow_constructible, IsNothrowConstructible, KEYCXX)
406TYPE_TRAIT_2(__is_assignable, IsAssignable, KEYCXX)
407TYPE_TRAIT_1(__has_nothrow_move_assign, HasNothrowMoveAssign, KEYCXX)
408TYPE_TRAIT_1(__has_trivial_move_assign, HasTrivialMoveAssign, KEYCXX)
409TYPE_TRAIT_1(__has_trivial_move_constructor, HasTrivialMoveConstructor, KEYCXX)
410TYPE_TRAIT_1(__builtin_is_implicit_lifetime, IsImplicitLifetime, KEYCXX)
411TYPE_TRAIT_2(__builtin_is_virtual_base_of, IsVirtualBaseOf, KEYCXX)
412TYPE_TRAIT_1(__has_nothrow_assign, HasNothrowAssign, KEYCXX)
413TYPE_TRAIT_1(__has_nothrow_copy, HasNothrowCopy, KEYCXX)
414TYPE_TRAIT_1(__has_nothrow_constructor, HasNothrowConstructor, KEYCXX)
415TYPE_TRAIT_1(__has_trivial_assign, HasTrivialAssign, KEYCXX)
416TYPE_TRAIT_1(__has_trivial_copy, HasTrivialCopy, KEYCXX)
417TYPE_TRAIT_1(__has_trivial_constructor, HasTrivialDefaultConstructor, KEYCXX)
418TYPE_TRAIT_1(__has_trivial_destructor, HasTrivialDestructor, KEYCXX)
419TYPE_TRAIT_1(__has_virtual_destructor, HasVirtualDestructor, KEYCXX)
420TYPE_TRAIT_1(__is_abstract, IsAbstract, KEYCXX)
421TYPE_TRAIT_1(__is_aggregate, IsAggregate, KEYCXX)
422TYPE_TRAIT_2(__is_base_of, IsBaseOf, KEYCXX)
423TYPE_TRAIT_1(__is_class, IsClass, KEYCXX)
424TYPE_TRAIT_2(__is_convertible_to, IsConvertibleTo, KEYCXX)
425TYPE_TRAIT_1(__is_empty, IsEmpty, KEYCXX)
426TYPE_TRAIT_1(__is_enum, IsEnum, KEYCXX)
427TYPE_TRAIT_1(__is_final, IsFinal, KEYCXX)
428TYPE_TRAIT_1(__is_literal, IsLiteral, KEYCXX)
429TYPE_TRAIT_1(__is_pod, IsPOD, KEYCXX)
430TYPE_TRAIT_1(__is_polymorphic, IsPolymorphic, KEYCXX)
431TYPE_TRAIT_1(__is_standard_layout, IsStandardLayout, KEYCXX)
432TYPE_TRAIT_1(__is_trivial, IsTrivial, KEYCXX)
433TYPE_TRAIT_2(__is_trivially_assignable, IsTriviallyAssignable, KEYCXX)
434TYPE_TRAIT_N(__is_trivially_constructible, IsTriviallyConstructible, KEYCXX)
435TYPE_TRAIT_1(__is_trivially_copyable, IsTriviallyCopyable, KEYCXX)
436TYPE_TRAIT_1(__is_union, IsUnion, KEYCXX)
437TYPE_TRAIT_1(__has_unique_object_representations, HasUniqueObjectRepresentations, KEYCXX)
438TYPE_TRAIT_2(__is_layout_compatible, IsLayoutCompatible, KEYCXX)
439TYPE_TRAIT_2(__is_pointer_interconvertible_base_of, IsPointerInterconvertibleBaseOf, KEYCXX)
440TRANSFORM_TYPE_TRAIT_DEF(AddLvalueReference, add_lvalue_reference)
441TRANSFORM_TYPE_TRAIT_DEF(AddPointer, add_pointer)
442TRANSFORM_TYPE_TRAIT_DEF(AddRvalueReference, add_rvalue_reference)
443TRANSFORM_TYPE_TRAIT_DEF(Decay, decay)
444TRANSFORM_TYPE_TRAIT_DEF(MakeSigned, make_signed)
445TRANSFORM_TYPE_TRAIT_DEF(MakeUnsigned, make_unsigned)
446TRANSFORM_TYPE_TRAIT_DEF(RemoveAllExtents, remove_all_extents)
447TRANSFORM_TYPE_TRAIT_DEF(RemoveConst, remove_const)
448TRANSFORM_TYPE_TRAIT_DEF(RemoveCV, remove_cv)
449TRANSFORM_TYPE_TRAIT_DEF(RemoveCVRef, remove_cvref)
450TRANSFORM_TYPE_TRAIT_DEF(RemoveExtent, remove_extent)
451TRANSFORM_TYPE_TRAIT_DEF(RemovePointer, remove_pointer)
452TRANSFORM_TYPE_TRAIT_DEF(RemoveReference, remove_reference_t)
453TRANSFORM_TYPE_TRAIT_DEF(RemoveRestrict, remove_restrict)
454TRANSFORM_TYPE_TRAIT_DEF(RemoveVolatile, remove_volatile)
455TRANSFORM_TYPE_TRAIT_DEF(EnumUnderlyingType, underlying_type)
456TYPE_TRAIT_1(__is_trivially_equality_comparable, IsTriviallyEqualityComparable, KEYCXX)
457TYPE_TRAIT_1(__is_bounded_array, IsBoundedArray, KEYCXX)
458TYPE_TRAIT_1(__is_unbounded_array, IsUnboundedArray, KEYCXX)
459TYPE_TRAIT_1(__is_scoped_enum, IsScopedEnum, KEYCXX)
460TYPE_TRAIT_1(__can_pass_in_regs, CanPassInRegs, KEYCXX)
461TYPE_TRAIT_2(__reference_binds_to_temporary, ReferenceBindsToTemporary, KEYCXX)
462TYPE_TRAIT_2(__reference_constructs_from_temporary, ReferenceConstructsFromTemporary, KEYCXX)
463TYPE_TRAIT_2(__reference_converts_from_temporary, ReferenceConvertsFromTemporary, KEYCXX)
464TYPE_TRAIT_2(__builtin_lt_synthesizes_from_spaceship, LtSynthesizesFromSpaceship, KEYCXX)
465TYPE_TRAIT_2(__builtin_le_synthesizes_from_spaceship, LeSynthesizesFromSpaceship, KEYCXX)
466TYPE_TRAIT_2(__builtin_gt_synthesizes_from_spaceship, GtSynthesizesFromSpaceship, KEYCXX)
467TYPE_TRAIT_2(__builtin_ge_synthesizes_from_spaceship, GeSynthesizesFromSpaceship, KEYCXX)
468TYPE_TRAIT_2(, IsDeducible, KEYCXX)
469TYPE_TRAIT_1(__builtin_is_cpp_trivially_relocatable, IsCppTriviallyRelocatable, KEYCXX)
470TYPE_TRAIT_1(__is_trivially_relocatable, IsTriviallyRelocatable, KEYCXX)
471TYPE_TRAIT_1(__is_bitwise_cloneable, IsBitwiseCloneable, KEYALL)
472TYPE_TRAIT_1(__builtin_structured_binding_size, StructuredBindingSize, KEYCXX)
473EXPRESSION_TRAIT(__is_lvalue_expr, IsLValueExpr, KEYCXX)
474EXPRESSION_TRAIT(__is_rvalue_expr, IsRValueExpr, KEYCXX)
475TYPE_TRAIT_1(__is_arithmetic, IsArithmetic, KEYCXX)
476TYPE_TRAIT_1(__is_floating_point, IsFloatingPoint, KEYCXX)
477TYPE_TRAIT_1(__is_integral, IsIntegral, KEYCXX)
478TYPE_TRAIT_1(__is_complete_type, IsCompleteType, KEYCXX)
479TYPE_TRAIT_1(__is_void, IsVoid, KEYCXX)
480TYPE_TRAIT_1(__is_array, IsArray, KEYCXX)
481TYPE_TRAIT_1(__is_function, IsFunction, KEYCXX)
482TYPE_TRAIT_1(__is_reference, IsReference, KEYCXX)
483TYPE_TRAIT_1(__is_lvalue_reference, IsLvalueReference, KEYCXX)
484TYPE_TRAIT_1(__is_rvalue_reference, IsRvalueReference, KEYCXX)
485TYPE_TRAIT_1(__is_fundamental, IsFundamental, KEYCXX)
486TYPE_TRAIT_1(__is_object, IsObject, KEYCXX)
487TYPE_TRAIT_1(__is_scalar, IsScalar, KEYCXX)
488TYPE_TRAIT_1(__is_compound, IsCompound, KEYCXX)
489TYPE_TRAIT_1(__is_pointer, IsPointer, KEYCXX)
490TYPE_TRAIT_1(__is_member_object_pointer, IsMemberObjectPointer, KEYCXX)
491TYPE_TRAIT_1(__is_member_function_pointer, IsMemberFunctionPointer, KEYCXX)
492TYPE_TRAIT_1(__is_member_pointer, IsMemberPointer, KEYCXX)
493TYPE_TRAIT_1(__is_const, IsConst, KEYCXX)
494TYPE_TRAIT_1(__is_volatile, IsVolatile, KEYCXX)
495TYPE_TRAIT_1(__is_signed, IsSigned, KEYCXX)
496TYPE_TRAIT_1(__is_unsigned, IsUnsigned, KEYCXX)
497TYPE_TRAIT_2(__is_same, IsSame, KEYCXX)
498TYPE_TRAIT_2(__is_convertible, IsConvertible, KEYCXX)
499TYPE_TRAIT_2(__is_nothrow_convertible, IsNothrowConvertible, KEYCXX)
500ARRAY_TYPE_TRAIT(__array_rank, ArrayRank, KEYCXX)
501ARRAY_TYPE_TRAIT(__array_extent, ArrayExtent, KEYCXX)
502UNARY_EXPR_OR_TYPE_TRAIT(__builtin_ptrauth_type_discriminator, PtrAuthTypeDiscriminator, KEYALL)
503UNARY_EXPR_OR_TYPE_TRAIT(vec_step, VecStep, KEYOPENCLC | KEYOPENCLCXX | KEYALTIVEC | KEYZVECTOR)
504TYPE_TRAIT_2(__builtin_hlsl_is_scalarized_layout_compatible, IsScalarizedLayoutCompatible, KEYHLSL)
505TYPE_TRAIT_1(__builtin_hlsl_is_intangible, IsIntangibleType, KEYHLSL)
506TYPE_TRAIT_1(__builtin_hlsl_is_typed_resource_element_compatible, IsTypedResourceElementCompatible, KEYHLSL)
507TYPE_TRAIT_1(__builtin_hlsl_is_constant_buffer_element_compatible, IsConstantBufferElementCompatible, KEYHLSL)
508UNARY_EXPR_OR_TYPE_TRAIT(__builtin_omp_required_simd_align, OpenMPRequiredSimdAlign, KEYALL)
509UNARY_EXPR_OR_TYPE_TRAIT(__builtin_vectorelements, VectorElements, KEYALL)
510ALIAS("__alignof__", __alignof, KEYALL)
511ALIAS("__builtin_alignof", __alignof, KEYMS)
512ALIAS("_alignof", __alignof, KEYMS)
513ALIAS("__is_literal_type", __is_literal, KEYCXX)
514ALIAS("__is_same_as", __is_same, KEYCXX)
515#undef ALIAS
516#undef TRANSFORM_TYPE_TRAIT_DEF
517#undef EXPRESSION_TRAIT
518#undef CXX11_UNARY_EXPR_OR_TYPE_TRAIT
519#undef UNARY_EXPR_OR_TYPE_TRAIT
520#undef ARRAY_TYPE_TRAIT
521#undef TYPE_TRAIT_N
522#undef TYPE_TRAIT_2
523#undef TYPE_TRAIT_1
524#endif
525
526
527#undef EMIT_ARRAYS
528#undef EMIT_ENUMS
529#undef EMIT_STD_NAME_CASES
530
531