1 | /* This file contains the definitions for C++-specific built-in traits. |
2 | |
3 | Copyright The GNU Toolchain Authors. |
4 | |
5 | This file is part of GCC. |
6 | |
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) |
10 | any later version. |
11 | |
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. |
16 | |
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/>. */ |
20 | |
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. */ |
27 | |
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. */ |
33 | |
34 | #ifdef DEFTRAIT |
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 |
39 | #endif |
40 | |
41 | #ifndef DEFTRAIT_EXPR |
42 | #define DEFTRAIT_EXPR(CODE, NAME, ARITY) |
43 | #define DEFTRAIT_EXPR_DEFAULTED |
44 | #endif |
45 | |
46 | #ifndef DEFTRAIT_TYPE |
47 | #define DEFTRAIT_TYPE(CODE, NAME, ARITY) |
48 | #define DEFTRAIT_TYPE_DEFAULTED |
49 | #endif |
50 | |
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) |
89 | |
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) |
95 | |
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) |
100 | |
101 | #ifdef DEFTRAIT_EXPR_DEFAULTED |
102 | #undef DEFTRAIT_EXPR |
103 | #undef DEFTRAIT_EXPR_DEFAULTED |
104 | #endif |
105 | |
106 | #ifdef DEFTRAIT_TYPE_DEFAULTED |
107 | #undef DEFTRAIT_TYPE |
108 | #undef DEFTRAIT_TYPE_DEFAULTED |
109 | #endif |
110 | |