1193326Sed//===--- TypeTraits.h - C++ Type Traits Support Enumerations ----*- C++ -*-===//
2193326Sed//
3193326Sed//                     The LLVM Compiler Infrastructure
4193326Sed//
5193326Sed// This file is distributed under the University of Illinois Open Source
6193326Sed// License. See LICENSE.TXT for details.
7193326Sed//
8193326Sed//===----------------------------------------------------------------------===//
9239462Sdim///
10239462Sdim/// \file
11239462Sdim/// \brief Defines enumerations for the type traits support.
12239462Sdim///
13193326Sed//===----------------------------------------------------------------------===//
14193326Sed
15193326Sed#ifndef LLVM_CLANG_TYPETRAITS_H
16193326Sed#define LLVM_CLANG_TYPETRAITS_H
17193326Sed
18193326Sednamespace clang {
19193326Sed
20239462Sdim  /// \brief Names for the unary type traits.
21193326Sed  enum UnaryTypeTrait {
22193326Sed    UTT_HasNothrowAssign,
23249423Sdim    UTT_HasNothrowMoveAssign,
24193326Sed    UTT_HasNothrowCopy,
25193326Sed    UTT_HasNothrowConstructor,
26193326Sed    UTT_HasTrivialAssign,
27249423Sdim    UTT_HasTrivialMoveAssign,
28193326Sed    UTT_HasTrivialCopy,
29223017Sdim    UTT_HasTrivialDefaultConstructor,
30249423Sdim    UTT_HasTrivialMoveConstructor,
31193326Sed    UTT_HasTrivialDestructor,
32193326Sed    UTT_HasVirtualDestructor,
33193326Sed    UTT_IsAbstract,
34221345Sdim    UTT_IsArithmetic,
35221345Sdim    UTT_IsArray,
36193326Sed    UTT_IsClass,
37221345Sdim    UTT_IsCompleteType,
38221345Sdim    UTT_IsCompound,
39221345Sdim    UTT_IsConst,
40193326Sed    UTT_IsEmpty,
41193326Sed    UTT_IsEnum,
42234353Sdim    UTT_IsFinal,
43221345Sdim    UTT_IsFloatingPoint,
44221345Sdim    UTT_IsFunction,
45221345Sdim    UTT_IsFundamental,
46221345Sdim    UTT_IsIntegral,
47243830Sdim    UTT_IsInterfaceClass,
48221345Sdim    UTT_IsLiteral,
49221345Sdim    UTT_IsLvalueReference,
50221345Sdim    UTT_IsMemberFunctionPointer,
51221345Sdim    UTT_IsMemberObjectPointer,
52221345Sdim    UTT_IsMemberPointer,
53221345Sdim    UTT_IsObject,
54193326Sed    UTT_IsPOD,
55221345Sdim    UTT_IsPointer,
56193326Sed    UTT_IsPolymorphic,
57221345Sdim    UTT_IsReference,
58221345Sdim    UTT_IsRvalueReference,
59221345Sdim    UTT_IsScalar,
60263508Sdim    UTT_IsSealed,
61221345Sdim    UTT_IsSigned,
62221345Sdim    UTT_IsStandardLayout,
63221345Sdim    UTT_IsTrivial,
64223017Sdim    UTT_IsTriviallyCopyable,
65200583Srdivacky    UTT_IsUnion,
66221345Sdim    UTT_IsUnsigned,
67221345Sdim    UTT_IsVoid,
68221345Sdim    UTT_IsVolatile
69193326Sed  };
70193326Sed
71239462Sdim  /// \brief Names for the binary type traits.
72218893Sdim  enum BinaryTypeTrait {
73218893Sdim    BTT_IsBaseOf,
74221345Sdim    BTT_IsConvertible,
75221345Sdim    BTT_IsConvertibleTo,
76221345Sdim    BTT_IsSame,
77234353Sdim    BTT_TypeCompatible,
78234353Sdim    BTT_IsTriviallyAssignable
79218893Sdim  };
80221345Sdim
81239462Sdim  /// \brief Names for the array type traits.
82221345Sdim  enum ArrayTypeTrait {
83221345Sdim    ATT_ArrayRank,
84221345Sdim    ATT_ArrayExtent
85221345Sdim  };
86221345Sdim
87239462Sdim  /// \brief Names for the "expression or type" traits.
88221345Sdim  enum UnaryExprOrTypeTrait {
89221345Sdim    UETT_SizeOf,
90221345Sdim    UETT_AlignOf,
91221345Sdim    UETT_VecStep
92221345Sdim  };
93234353Sdim
94234353Sdim  /// \brief Names for type traits that operate specifically on types.
95234353Sdim  enum TypeTrait {
96234353Sdim    TT_IsTriviallyConstructible
97234353Sdim  };
98234353Sdim
99193326Sed}
100193326Sed
101193326Sed#endif
102