[LLD] [COFF] Handle undefined weak symbols in LTO (#70430)
[llvm-project.git] / libcxx / modules / std / type_traits.inc
blobd368daf35ccb8c0ffd1a2ccc92239fb97b14edcc
1 // -*- C++ -*-
2 //===----------------------------------------------------------------------===//
3 //
4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 // See https://llvm.org/LICENSE.txt for license information.
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //
8 //===----------------------------------------------------------------------===//
10 export namespace std {
11   // [meta.help], helper class
12   using std::integral_constant;
14   using std::bool_constant;
15   using std::false_type;
16   using std::true_type;
18   // [meta.unary.cat], primary type categories
19   using std::is_array;
20   using std::is_class;
21   using std::is_enum;
22   using std::is_floating_point;
23   using std::is_function;
24   using std::is_integral;
25   using std::is_lvalue_reference;
26   using std::is_member_function_pointer;
27   using std::is_member_object_pointer;
28   using std::is_null_pointer;
29   using std::is_pointer;
30   using std::is_rvalue_reference;
31   using std::is_union;
32   using std::is_void;
34   // [meta.unary.comp], composite type categories
35   using std::is_arithmetic;
36   using std::is_compound;
37   using std::is_fundamental;
38   using std::is_member_pointer;
39   using std::is_object;
40   using std::is_reference;
41   using std::is_scalar;
43   // [meta.unary.prop], type properties
44   using std::is_abstract;
45   using std::is_aggregate;
46   using std::is_const;
47   using std::is_empty;
48   using std::is_final;
49   using std::is_polymorphic;
50   using std::is_standard_layout;
51   using std::is_trivial;
52   using std::is_trivially_copyable;
53   using std::is_volatile;
55   using std::is_bounded_array;
56 #if _LIBCPP_STD_VER >= 23
57   using std::is_scoped_enum;
58 #endif
59   using std::is_signed;
60   using std::is_unbounded_array;
61   using std::is_unsigned;
63   using std::is_constructible;
64   using std::is_copy_constructible;
65   using std::is_default_constructible;
66   using std::is_move_constructible;
68   using std::is_assignable;
69   using std::is_copy_assignable;
70   using std::is_move_assignable;
72   using std::is_swappable;
73   using std::is_swappable_with;
75   using std::is_destructible;
77   using std::is_trivially_constructible;
78   using std::is_trivially_copy_constructible;
79   using std::is_trivially_default_constructible;
80   using std::is_trivially_move_constructible;
82   using std::is_trivially_assignable;
83   using std::is_trivially_copy_assignable;
84   using std::is_trivially_destructible;
85   using std::is_trivially_move_assignable;
87   using std::is_nothrow_constructible;
88   using std::is_nothrow_copy_constructible;
89   using std::is_nothrow_default_constructible;
90   using std::is_nothrow_move_constructible;
92   using std::is_nothrow_assignable;
93   using std::is_nothrow_copy_assignable;
94   using std::is_nothrow_move_assignable;
96   using std::is_nothrow_swappable;
97   using std::is_nothrow_swappable_with;
99   using std::is_nothrow_destructible;
101   //  using std::is_implicit_lifetime;
103   using std::has_virtual_destructor;
105   using std::has_unique_object_representations;
107   // using std::reference_constructs_from_temporary;
108   // using std::reference_converts_from_temporary;
110   // [meta.unary.prop.query], type property queries
111   using std::alignment_of;
112   using std::extent;
113   using std::rank;
115   // [meta.rel], type relations
116   using std::is_base_of;
117   using std::is_convertible;
118   // using std::is_layout_compatible;
119   using std::is_nothrow_convertible;
120   // using std::is_pointer_interconvertible_base_of;
121   using std::is_same;
123   using std::is_invocable;
124   using std::is_invocable_r;
126   using std::is_nothrow_invocable;
127   using std::is_nothrow_invocable_r;
129   // [meta.trans.cv], const-volatile modifications
130   using std::add_const;
131   using std::add_cv;
132   using std::add_volatile;
133   using std::remove_const;
134   using std::remove_cv;
135   using std::remove_volatile;
137   using std::add_const_t;
138   using std::add_cv_t;
139   using std::add_volatile_t;
140   using std::remove_const_t;
141   using std::remove_cv_t;
142   using std::remove_volatile_t;
144   // [meta.trans.ref], reference modifications
145   using std::add_lvalue_reference;
146   using std::add_rvalue_reference;
147   using std::remove_reference;
149   using std::add_lvalue_reference_t;
150   using std::add_rvalue_reference_t;
151   using std::remove_reference_t;
153   // [meta.trans.sign], sign modifications
154   using std::make_signed;
155   using std::make_unsigned;
157   using std::make_signed_t;
158   using std::make_unsigned_t;
160   // [meta.trans.arr], array modifications
161   using std::remove_all_extents;
162   using std::remove_extent;
164   using std::remove_all_extents_t;
165   using std::remove_extent_t;
167   // [meta.trans.ptr], pointer modifications
168   using std::add_pointer;
169   using std::remove_pointer;
171   using std::add_pointer_t;
172   using std::remove_pointer_t;
174   // [meta.trans.other], other transformations
175   using std::basic_common_reference;
176   using std::common_reference;
177   using std::common_type;
178   using std::conditional;
179   using std::decay;
180   using std::enable_if;
181   using std::invoke_result;
182   using std::remove_cvref;
183   using std::type_identity;
184   using std::underlying_type;
185   using std::unwrap_ref_decay;
186   using std::unwrap_reference;
188   using std::common_reference_t;
189   using std::common_type_t;
190   using std::conditional_t;
191   using std::decay_t;
192   using std::enable_if_t;
193   using std::invoke_result_t;
194   using std::remove_cvref_t;
195   using std::type_identity_t;
196   using std::underlying_type_t;
197   using std::unwrap_ref_decay_t;
198   using std::unwrap_reference_t;
199   using std::void_t;
201   // [meta.logical], logical operator traits
202   using std::conjunction;
203   using std::disjunction;
204   using std::negation;
206   // [meta.unary.cat], primary type categories
207   using std::is_array_v;
208   using std::is_class_v;
209   using std::is_enum_v;
210   using std::is_floating_point_v;
211   using std::is_function_v;
212   using std::is_integral_v;
213   using std::is_lvalue_reference_v;
214   using std::is_member_function_pointer_v;
215   using std::is_member_object_pointer_v;
216   using std::is_null_pointer_v;
217   using std::is_pointer_v;
218   using std::is_rvalue_reference_v;
219   using std::is_union_v;
220   using std::is_void_v;
222   // [meta.unary.comp], composite type categories
223   using std::is_arithmetic_v;
224   using std::is_compound_v;
225   using std::is_fundamental_v;
226   using std::is_member_pointer_v;
227   using std::is_object_v;
228   using std::is_reference_v;
229   using std::is_scalar_v;
231   // [meta.unary.prop], type properties
232   using std::has_unique_object_representations_v;
233   using std::has_virtual_destructor_v;
234   using std::is_abstract_v;
235   using std::is_aggregate_v;
236   using std::is_assignable_v;
237   using std::is_bounded_array_v;
238   using std::is_const_v;
239   using std::is_constructible_v;
240   using std::is_copy_assignable_v;
241   using std::is_copy_constructible_v;
242   using std::is_default_constructible_v;
243   using std::is_destructible_v;
244   using std::is_empty_v;
245   using std::is_final_v;
246   // using std::is_implicit_lifetime_v;
247   using std::is_move_assignable_v;
248   using std::is_move_constructible_v;
249   using std::is_nothrow_assignable_v;
250   using std::is_nothrow_constructible_v;
251   using std::is_nothrow_copy_assignable_v;
252   using std::is_nothrow_copy_constructible_v;
253   using std::is_nothrow_default_constructible_v;
254   using std::is_nothrow_destructible_v;
255   using std::is_nothrow_move_assignable_v;
256   using std::is_nothrow_move_constructible_v;
257   using std::is_nothrow_swappable_v;
258   using std::is_nothrow_swappable_with_v;
259   using std::is_polymorphic_v;
260 #if _LIBCPP_STD_VER >= 23
261   using std::is_scoped_enum_v;
262 #endif
263   using std::is_signed_v;
264   using std::is_standard_layout_v;
265   using std::is_swappable_v;
266   using std::is_swappable_with_v;
267   using std::is_trivial_v;
268   using std::is_trivially_assignable_v;
269   using std::is_trivially_constructible_v;
270   using std::is_trivially_copy_assignable_v;
271   using std::is_trivially_copy_constructible_v;
272   using std::is_trivially_copyable_v;
273   using std::is_trivially_default_constructible_v;
274   using std::is_trivially_destructible_v;
275   using std::is_trivially_move_assignable_v;
276   using std::is_trivially_move_constructible_v;
277   using std::is_unbounded_array_v;
278   using std::is_unsigned_v;
279   using std::is_volatile_v;
280   // using std::reference_constructs_from_temporary_v;
281   // using std::reference_converts_from_temporary_v;
283   // [meta.unary.prop.query], type property queries
284   using std::alignment_of_v;
285   using std::extent_v;
286   using std::rank_v;
288   // [meta.rel], type relations
289   using std::is_base_of_v;
290   using std::is_convertible_v;
291   using std::is_invocable_r_v;
292   using std::is_invocable_v;
293   // using std::is_layout_compatible_v;
294   using std::is_nothrow_convertible_v;
295   using std::is_nothrow_invocable_r_v;
296   using std::is_nothrow_invocable_v;
297   // using std::is_pointer_interconvertible_base_of_v;
298   using std::is_same_v;
300   // [meta.logical], logical operator traits
301   using std::conjunction_v;
302   using std::disjunction_v;
303   using std::negation_v;
305   // [meta.member], member relationships
306   // using std::is_corresponding_member;
307   // using std::is_pointer_interconvertible_with_class;
309   // [meta.const.eval], constant evaluation context
310   using std::is_constant_evaluated;
312   // [depr.meta.types]
313   using std::aligned_storage;
314   using std::aligned_storage_t;
315   using std::aligned_union;
316   using std::aligned_union_t;
317   using std::is_pod;
318   using std::is_pod_v;
319 } // namespace std