164b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl//===--- TypeTraits.h - C++ Type Traits Support Enumerations ----*- C++ -*-===//
264b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl//
364b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl//                     The LLVM Compiler Infrastructure
464b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl//
564b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl// This file is distributed under the University of Illinois Open Source
664b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl// License. See LICENSE.TXT for details.
764b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl//
864b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl//===----------------------------------------------------------------------===//
92f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett///
102f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett/// \file
112f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett/// \brief Defines enumerations for the type traits support.
122f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett///
1364b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl//===----------------------------------------------------------------------===//
1464b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl
15176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#ifndef LLVM_CLANG_BASIC_TYPETRAITS_H
16176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#define LLVM_CLANG_BASIC_TYPETRAITS_H
1764b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl
1864b45f7e0d3167f040841ac2920aead7f080730dSebastian Redlnamespace clang {
1964b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl
20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  /// \brief Names for traits that operate specifically on types.
21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  enum TypeTrait {
2264b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl    UTT_HasNothrowAssign,
239ef9875bbe19dc9f73c6c95b803d9a4945168690Joao Matos    UTT_HasNothrowMoveAssign,
2464b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl    UTT_HasNothrowCopy,
2564b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl    UTT_HasNothrowConstructor,
2664b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl    UTT_HasTrivialAssign,
279ef9875bbe19dc9f73c6c95b803d9a4945168690Joao Matos    UTT_HasTrivialMoveAssign,
2864b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl    UTT_HasTrivialCopy,
29023df37c27ee8035664fb62f206ca58f4e2a169dSean Hunt    UTT_HasTrivialDefaultConstructor,
309ef9875bbe19dc9f73c6c95b803d9a4945168690Joao Matos    UTT_HasTrivialMoveConstructor,
3164b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl    UTT_HasTrivialDestructor,
3264b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl    UTT_HasVirtualDestructor,
3364b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl    UTT_IsAbstract,
3420c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsArithmetic,
3520c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsArray,
3664b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl    UTT_IsClass,
3720c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsCompleteType,
3820c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsCompound,
3920c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsConst,
40651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    UTT_IsDestructible,
4164b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl    UTT_IsEmpty,
4264b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl    UTT_IsEnum,
435e9392ba18f5925e26cc5714d1412eda0d219826Douglas Gregor    UTT_IsFinal,
4420c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsFloatingPoint,
4520c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsFunction,
4620c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsFundamental,
4720c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsIntegral,
48ea30e2f8667668173cf7433c3c80cf603bd922a4John McCall    UTT_IsInterfaceClass,
494e61ddd644e9c6293697a966d98d7c1905cf63a8Chandler Carruth    UTT_IsLiteral,
5020c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsLvalueReference,
5120c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsMemberFunctionPointer,
5220c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsMemberObjectPointer,
5320c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsMemberPointer,
54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    UTT_IsNothrowDestructible,
5520c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsObject,
5664b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl    UTT_IsPOD,
5720c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsPointer,
5864b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl    UTT_IsPolymorphic,
5920c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsReference,
6020c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsRvalueReference,
6120c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsScalar,
627121bdb91b86f6053765bda18dd0a8a118929aceDavid Majnemer    UTT_IsSealed,
6320c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsSigned,
6420c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsStandardLayout,
65b7e9589bce9852b4db9575f55ac9137572147eb5Chandler Carruth    UTT_IsTrivial,
66feb375d31b7e9108b04a9f55b721d5e0c793a558Sean Hunt    UTT_IsTriviallyCopyable,
6720c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsUnion,
6820c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsUnsigned,
6920c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    UTT_IsVoid,
70651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    UTT_IsVolatile,
71651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    UTT_Last = UTT_IsVolatile,
72f187237d916afa97c491ac32fe98be7d335c5b63Francois Pichet    BTT_IsBaseOf,
7320c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    BTT_IsConvertible,
7420c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    BTT_IsConvertibleTo,
7520c0da7787c9a7d2529e42a4a91d777778595d74John Wiegley    BTT_IsSame,
7625d0a0f67d9e949ffbfc57bf487012f5cbfd886eDouglas Gregor    BTT_TypeCompatible,
77651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    BTT_IsNothrowAssignable,
78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    BTT_IsTriviallyAssignable,
79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    BTT_Last = BTT_IsTriviallyAssignable,
80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    TT_IsConstructible,
81651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    TT_IsNothrowConstructible,
82651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    TT_IsTriviallyConstructible
836ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet  };
84f4e3cfbe8abd124be6341ef5d714819b4fbd9082Peter Collingbourne
85af50aab0c317462129d73ae8000c6394c718598dJames Dennett  /// \brief Names for the array type traits.
8621ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley  enum ArrayTypeTrait {
8721ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley    ATT_ArrayRank,
8821ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley    ATT_ArrayExtent
8921ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley  };
9021ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley
91af50aab0c317462129d73ae8000c6394c718598dJames Dennett  /// \brief Names for the "expression or type" traits.
92f4e3cfbe8abd124be6341ef5d714819b4fbd9082Peter Collingbourne  enum UnaryExprOrTypeTrait {
93f4e3cfbe8abd124be6341ef5d714819b4fbd9082Peter Collingbourne    UETT_SizeOf,
94f4e3cfbe8abd124be6341ef5d714819b4fbd9082Peter Collingbourne    UETT_AlignOf,
95f4e3cfbe8abd124be6341ef5d714819b4fbd9082Peter Collingbourne    UETT_VecStep
96f4e3cfbe8abd124be6341ef5d714819b4fbd9082Peter Collingbourne  };
9764b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl}
9864b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl
9964b45f7e0d3167f040841ac2920aead7f080730dSebastian Redl#endif
100