]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm-project/clang/include/clang/Basic/TypeTraits.h
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm-project / clang / include / clang / Basic / TypeTraits.h
1 //===--- TypeTraits.h - C++ Type Traits Support Enumerations ----*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 ///
9 /// \file
10 /// Defines enumerations for the type traits support.
11 ///
12 //===----------------------------------------------------------------------===//
13
14 #ifndef LLVM_CLANG_BASIC_TYPETRAITS_H
15 #define LLVM_CLANG_BASIC_TYPETRAITS_H
16
17 namespace clang {
18
19   /// Names for traits that operate specifically on types.
20   enum TypeTrait {
21     UTT_HasNothrowAssign,
22     UTT_HasNothrowMoveAssign,
23     UTT_HasNothrowCopy,
24     UTT_HasNothrowConstructor,
25     UTT_HasTrivialAssign,
26     UTT_HasTrivialMoveAssign,
27     UTT_HasTrivialCopy,
28     UTT_HasTrivialDefaultConstructor,
29     UTT_HasTrivialMoveConstructor,
30     UTT_HasTrivialDestructor,
31     UTT_HasVirtualDestructor,
32     UTT_IsAbstract,
33     UTT_IsAggregate,
34     UTT_IsArithmetic,
35     UTT_IsArray,
36     UTT_IsClass,
37     UTT_IsCompleteType,
38     UTT_IsCompound,
39     UTT_IsConst,
40     UTT_IsDestructible,
41     UTT_IsEmpty,
42     UTT_IsEnum,
43     UTT_IsFinal,
44     UTT_IsFloatingPoint,
45     UTT_IsFunction,
46     UTT_IsFundamental,
47     UTT_IsIntegral,
48     UTT_IsInterfaceClass,
49     UTT_IsLiteral,
50     UTT_IsLvalueReference,
51     UTT_IsMemberFunctionPointer,
52     UTT_IsMemberObjectPointer,
53     UTT_IsMemberPointer,
54     UTT_IsNothrowDestructible,
55     UTT_IsObject,
56     UTT_IsPOD,
57     UTT_IsPointer,
58     UTT_IsPolymorphic,
59     UTT_IsReference,
60     UTT_IsRvalueReference,
61     UTT_IsScalar,
62     UTT_IsSealed,
63     UTT_IsSigned,
64     UTT_IsStandardLayout,
65     UTT_IsTrivial,
66     UTT_IsTriviallyCopyable,
67     UTT_IsTriviallyDestructible,
68     UTT_IsUnion,
69     UTT_IsUnsigned,
70     UTT_IsVoid,
71     UTT_IsVolatile,
72     UTT_HasUniqueObjectRepresentations,
73     UTT_Last = UTT_HasUniqueObjectRepresentations,
74     BTT_IsBaseOf,
75     BTT_IsConvertible,
76     BTT_IsConvertibleTo,
77     BTT_IsSame,
78     BTT_TypeCompatible,
79     BTT_IsAssignable,
80     BTT_IsNothrowAssignable,
81     BTT_IsTriviallyAssignable,
82     BTT_ReferenceBindsToTemporary,
83     BTT_Last = BTT_ReferenceBindsToTemporary,
84     TT_IsConstructible,
85     TT_IsNothrowConstructible,
86     TT_IsTriviallyConstructible
87   };
88
89   /// Names for the array type traits.
90   enum ArrayTypeTrait {
91     ATT_ArrayRank,
92     ATT_ArrayExtent
93   };
94
95   /// Names for the "expression or type" traits.
96   enum UnaryExprOrTypeTrait {
97     UETT_SizeOf,
98     /// Used for C's _Alignof and C++'s alignof.
99     /// _Alignof and alignof return the required ABI alignment.
100     UETT_AlignOf,
101     UETT_VecStep,
102     UETT_OpenMPRequiredSimdAlign,
103     /// Used for GCC's __alignof.
104     /// __alignof returns the preferred alignment of a type, the alignment
105     /// clang will attempt to give an object of the type if allowed by ABI.
106     UETT_PreferredAlignOf,
107   };
108 }
109
110 #endif