1 /* This file contains the definitions for C
++-specific built
-in traits.
3 Copyright The GNU Toolchain Authors.
5 This file is part of GCC.
7 GCC is free software
; you can redistribute it and
/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation
; either version
3, or (at your option
)
12 GCC is distributed in the hope that it will be useful
,
13 but WITHOUT ANY WARRANTY
; without even the implied warranty of
14 MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC
; see the file COPYING3. If not see
19 <http
://www.gnu.org
/licenses
/>.
*/
21 /* Add a
DEFTRAIT_EXPR (CODE
, NAME
, N
) line to this file to define an
22 expression
-yielding built
-in trait that has internal code name CODE
, is
23 spelled as NAME and takes N type
arguments (where N is either
1, 2, or
24 the special value
-1 which denotes that it takes at least one argument
).
25 Such traits are represented as TRAIT_EXPR tree whose TRAIT_EXPR_KIND is
26 CPTK_CODE. Define the behavior of the trait in finish_trait_expr.
*/
28 /* Add a
DEFTRAIT_TYPE (CODE
, NAME
, N
) line to this file to define a
29 type
-yielding built
-in trait as described above. Such traits are
30 generally represented as a TRAIT_TYPE tree whose TRAIT_TYPE_KIND is
31 CPTK_CODE (exceptions are BASES and DIRECT_BASES below
). Define the
32 behavior of the trait in finish_trait_type.
*/
35 #define
DEFTRAIT_EXPR(CODE
, NAME
, ARITY
) DEFTRAIT(tcc_expression
, CODE
, NAME
, ARITY
)
36 #define
DEFTRAIT_TYPE(CODE
, NAME
, ARITY
) DEFTRAIT(tcc_type
, CODE
, NAME
, ARITY
)
37 #define DEFTRAIT_EXPR_DEFAULTED
38 #define DEFTRAIT_TYPE_DEFAULTED
42 #define
DEFTRAIT_EXPR(CODE
, NAME
, ARITY
)
43 #define DEFTRAIT_EXPR_DEFAULTED
47 #define
DEFTRAIT_TYPE(CODE
, NAME
, ARITY
)
48 #define DEFTRAIT_TYPE_DEFAULTED
51 DEFTRAIT_EXPR (HAS_NOTHROW_ASSIGN
, "__has_nothrow_assign", 1)
52 DEFTRAIT_EXPR (HAS_NOTHROW_CONSTRUCTOR
, "__has_nothrow_constructor", 1)
53 DEFTRAIT_EXPR (HAS_NOTHROW_COPY
, "__has_nothrow_copy", 1)
54 DEFTRAIT_EXPR (HAS_TRIVIAL_ASSIGN
, "__has_trivial_assign", 1)
55 DEFTRAIT_EXPR (HAS_TRIVIAL_CONSTRUCTOR
, "__has_trivial_constructor", 1)
56 DEFTRAIT_EXPR (HAS_TRIVIAL_COPY
, "__has_trivial_copy", 1)
57 DEFTRAIT_EXPR (HAS_TRIVIAL_DESTRUCTOR
, "__has_trivial_destructor", 1)
58 DEFTRAIT_EXPR (HAS_UNIQUE_OBJ_REPRESENTATIONS
, "__has_unique_object_representations", 1)
59 DEFTRAIT_EXPR (HAS_VIRTUAL_DESTRUCTOR
, "__has_virtual_destructor", 1)
60 DEFTRAIT_EXPR (IS_ABSTRACT
, "__is_abstract", 1)
61 DEFTRAIT_EXPR (IS_AGGREGATE
, "__is_aggregate", 1)
62 DEFTRAIT_EXPR (IS_ASSIGNABLE
, "__is_assignable", 2)
63 DEFTRAIT_EXPR (IS_BASE_OF
, "__is_base_of", 2)
64 DEFTRAIT_EXPR (IS_CLASS
, "__is_class", 1)
65 DEFTRAIT_EXPR (IS_CONSTRUCTIBLE
, "__is_constructible", -1)
66 DEFTRAIT_EXPR (IS_CONVERTIBLE
, "__is_convertible", 2)
67 DEFTRAIT_EXPR (IS_EMPTY
, "__is_empty", 1)
68 DEFTRAIT_EXPR (IS_ENUM
, "__is_enum", 1)
69 DEFTRAIT_EXPR (IS_FINAL
, "__is_final", 1)
70 DEFTRAIT_EXPR (IS_LAYOUT_COMPATIBLE
, "__is_layout_compatible", 2)
71 DEFTRAIT_EXPR (IS_LITERAL_TYPE
, "__is_literal_type", 1)
72 DEFTRAIT_EXPR (IS_NOTHROW_ASSIGNABLE
, "__is_nothrow_assignable", 2)
73 DEFTRAIT_EXPR (IS_NOTHROW_CONSTRUCTIBLE
, "__is_nothrow_constructible", -1)
74 DEFTRAIT_EXPR (IS_NOTHROW_CONVERTIBLE
, "__is_nothrow_convertible", 2)
75 DEFTRAIT_EXPR (IS_POINTER_INTERCONVERTIBLE_BASE_OF
, "__is_pointer_interconvertible_base_of", 2)
76 DEFTRAIT_EXPR (IS_POD
, "__is_pod", 1)
77 DEFTRAIT_EXPR (IS_POLYMORPHIC
, "__is_polymorphic", 1)
78 DEFTRAIT_EXPR (IS_SAME
, "__is_same", 2)
79 DEFTRAIT_EXPR (IS_STD_LAYOUT
, "__is_standard_layout", 1)
80 DEFTRAIT_EXPR (IS_TRIVIAL
, "__is_trivial", 1)
81 DEFTRAIT_EXPR (IS_TRIVIALLY_ASSIGNABLE
, "__is_trivially_assignable", 2)
82 DEFTRAIT_EXPR (IS_TRIVIALLY_CONSTRUCTIBLE
, "__is_trivially_constructible", -1)
83 DEFTRAIT_EXPR (IS_TRIVIALLY_COPYABLE
, "__is_trivially_copyable", 1)
84 DEFTRAIT_EXPR (IS_UNION
, "__is_union", 1)
85 DEFTRAIT_EXPR (REF_CONSTRUCTS_FROM_TEMPORARY
, "__reference_constructs_from_temporary", 2)
86 DEFTRAIT_EXPR (REF_CONVERTS_FROM_TEMPORARY
, "__reference_converts_from_temporary", 2)
87 /* FIXME Added space to avoid direct usage in GCC
13.
*/
88 DEFTRAIT_EXPR (IS_DEDUCIBLE
, "__is_deducible ", 2)
90 DEFTRAIT_TYPE (REMOVE_CV
, "__remove_cv", 1)
91 DEFTRAIT_TYPE (REMOVE_REFERENCE
, "__remove_reference", 1)
92 DEFTRAIT_TYPE (REMOVE_CVREF
, "__remove_cvref", 1)
93 DEFTRAIT_TYPE (UNDERLYING_TYPE
, "__underlying_type", 1)
94 DEFTRAIT_TYPE (TYPE_PACK_ELEMENT
, "__type_pack_element", -1)
96 /* These traits yield a type pack
, not a type
, and are represented by
97 cp_parser_trait as a special BASES tree instead of a TRAIT_TYPE tree.
*/
98 DEFTRAIT_TYPE (BASES
, "__bases", 1)
99 DEFTRAIT_TYPE (DIRECT_BASES
, "__direct_bases", 1)
101 #ifdef DEFTRAIT_EXPR_DEFAULTED
103 #undef DEFTRAIT_EXPR_DEFAULTED
106 #ifdef DEFTRAIT_TYPE_DEFAULTED
108 #undef DEFTRAIT_TYPE_DEFAULTED