xref: /aosp_15_r20/external/cronet/third_party/libc++/src/docs/FeatureTestMacroTable.rst (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1.. _FeatureTestMacroTable:
2
3==========================
4Feature Test Macro Support
5==========================
6
7.. contents::
8   :local:
9
10Overview
11========
12
13This file documents the feature test macros currently supported by libc++.
14
15.. _feature-status:
16
17Status
18======
19
20.. table:: Current Status
21    :name: feature-status-table
22    :widths: auto
23
24    =================================================== =================
25    Macro Name                                          Value
26    =================================================== =================
27    **C++14**
28    ---------------------------------------------------------------------
29    ``__cpp_lib_chrono_udls``                           ``201304L``
30    --------------------------------------------------- -----------------
31    ``__cpp_lib_complex_udls``                          ``201309L``
32    --------------------------------------------------- -----------------
33    ``__cpp_lib_exchange_function``                     ``201304L``
34    --------------------------------------------------- -----------------
35    ``__cpp_lib_generic_associative_lookup``            ``201304L``
36    --------------------------------------------------- -----------------
37    ``__cpp_lib_integer_sequence``                      ``201304L``
38    --------------------------------------------------- -----------------
39    ``__cpp_lib_integral_constant_callable``            ``201304L``
40    --------------------------------------------------- -----------------
41    ``__cpp_lib_is_final``                              ``201402L``
42    --------------------------------------------------- -----------------
43    ``__cpp_lib_is_null_pointer``                       ``201309L``
44    --------------------------------------------------- -----------------
45    ``__cpp_lib_make_reverse_iterator``                 ``201402L``
46    --------------------------------------------------- -----------------
47    ``__cpp_lib_make_unique``                           ``201304L``
48    --------------------------------------------------- -----------------
49    ``__cpp_lib_null_iterators``                        ``201304L``
50    --------------------------------------------------- -----------------
51    ``__cpp_lib_quoted_string_io``                      ``201304L``
52    --------------------------------------------------- -----------------
53    ``__cpp_lib_result_of_sfinae``                      ``201210L``
54    --------------------------------------------------- -----------------
55    ``__cpp_lib_robust_nonmodifying_seq_ops``           ``201304L``
56    --------------------------------------------------- -----------------
57    ``__cpp_lib_shared_timed_mutex``                    ``201402L``
58    --------------------------------------------------- -----------------
59    ``__cpp_lib_string_udls``                           ``201304L``
60    --------------------------------------------------- -----------------
61    ``__cpp_lib_transformation_trait_aliases``          ``201304L``
62    --------------------------------------------------- -----------------
63    ``__cpp_lib_transparent_operators``                 ``201210L``
64    --------------------------------------------------- -----------------
65    ``__cpp_lib_tuple_element_t``                       ``201402L``
66    --------------------------------------------------- -----------------
67    ``__cpp_lib_tuples_by_type``                        ``201304L``
68    --------------------------------------------------- -----------------
69    **C++17**
70    ---------------------------------------------------------------------
71    ``__cpp_lib_addressof_constexpr``                   ``201603L``
72    --------------------------------------------------- -----------------
73    ``__cpp_lib_allocator_traits_is_always_equal``      ``201411L``
74    --------------------------------------------------- -----------------
75    ``__cpp_lib_any``                                   ``201606L``
76    --------------------------------------------------- -----------------
77    ``__cpp_lib_apply``                                 ``201603L``
78    --------------------------------------------------- -----------------
79    ``__cpp_lib_array_constexpr``                       ``201603L``
80    --------------------------------------------------- -----------------
81    ``__cpp_lib_as_const``                              ``201510L``
82    --------------------------------------------------- -----------------
83    ``__cpp_lib_atomic_is_always_lock_free``            ``201603L``
84    --------------------------------------------------- -----------------
85    ``__cpp_lib_bool_constant``                         ``201505L``
86    --------------------------------------------------- -----------------
87    ``__cpp_lib_boyer_moore_searcher``                  ``201603L``
88    --------------------------------------------------- -----------------
89    ``__cpp_lib_byte``                                  ``201603L``
90    --------------------------------------------------- -----------------
91    ``__cpp_lib_chrono``                                ``201611L``
92    --------------------------------------------------- -----------------
93    ``__cpp_lib_clamp``                                 ``201603L``
94    --------------------------------------------------- -----------------
95    ``__cpp_lib_enable_shared_from_this``               ``201603L``
96    --------------------------------------------------- -----------------
97    ``__cpp_lib_execution``                             *unimplemented*
98    --------------------------------------------------- -----------------
99    ``__cpp_lib_filesystem``                            ``201703L``
100    --------------------------------------------------- -----------------
101    ``__cpp_lib_gcd_lcm``                               ``201606L``
102    --------------------------------------------------- -----------------
103    ``__cpp_lib_hardware_interference_size``            ``201703L``
104    --------------------------------------------------- -----------------
105    ``__cpp_lib_has_unique_object_representations``     ``201606L``
106    --------------------------------------------------- -----------------
107    ``__cpp_lib_hypot``                                 ``201603L``
108    --------------------------------------------------- -----------------
109    ``__cpp_lib_incomplete_container_elements``         ``201505L``
110    --------------------------------------------------- -----------------
111    ``__cpp_lib_invoke``                                ``201411L``
112    --------------------------------------------------- -----------------
113    ``__cpp_lib_is_aggregate``                          ``201703L``
114    --------------------------------------------------- -----------------
115    ``__cpp_lib_is_invocable``                          ``201703L``
116    --------------------------------------------------- -----------------
117    ``__cpp_lib_is_swappable``                          ``201603L``
118    --------------------------------------------------- -----------------
119    ``__cpp_lib_launder``                               ``201606L``
120    --------------------------------------------------- -----------------
121    ``__cpp_lib_logical_traits``                        ``201510L``
122    --------------------------------------------------- -----------------
123    ``__cpp_lib_make_from_tuple``                       ``201606L``
124    --------------------------------------------------- -----------------
125    ``__cpp_lib_map_try_emplace``                       ``201411L``
126    --------------------------------------------------- -----------------
127    ``__cpp_lib_math_special_functions``                *unimplemented*
128    --------------------------------------------------- -----------------
129    ``__cpp_lib_memory_resource``                       ``201603L``
130    --------------------------------------------------- -----------------
131    ``__cpp_lib_node_extract``                          ``201606L``
132    --------------------------------------------------- -----------------
133    ``__cpp_lib_nonmember_container_access``            ``201411L``
134    --------------------------------------------------- -----------------
135    ``__cpp_lib_not_fn``                                ``201603L``
136    --------------------------------------------------- -----------------
137    ``__cpp_lib_optional``                              ``201606L``
138    --------------------------------------------------- -----------------
139    ``__cpp_lib_parallel_algorithm``                    *unimplemented*
140    --------------------------------------------------- -----------------
141    ``__cpp_lib_raw_memory_algorithms``                 ``201606L``
142    --------------------------------------------------- -----------------
143    ``__cpp_lib_sample``                                ``201603L``
144    --------------------------------------------------- -----------------
145    ``__cpp_lib_scoped_lock``                           ``201703L``
146    --------------------------------------------------- -----------------
147    ``__cpp_lib_shared_mutex``                          ``201505L``
148    --------------------------------------------------- -----------------
149    ``__cpp_lib_shared_ptr_arrays``                     ``201611L``
150    --------------------------------------------------- -----------------
151    ``__cpp_lib_shared_ptr_weak_type``                  ``201606L``
152    --------------------------------------------------- -----------------
153    ``__cpp_lib_string_view``                           ``201606L``
154    --------------------------------------------------- -----------------
155    ``__cpp_lib_to_chars``                              *unimplemented*
156    --------------------------------------------------- -----------------
157    ``__cpp_lib_transparent_operators``                 ``201510L``
158    --------------------------------------------------- -----------------
159    ``__cpp_lib_type_trait_variable_templates``         ``201510L``
160    --------------------------------------------------- -----------------
161    ``__cpp_lib_uncaught_exceptions``                   ``201411L``
162    --------------------------------------------------- -----------------
163    ``__cpp_lib_unordered_map_try_emplace``             ``201411L``
164    --------------------------------------------------- -----------------
165    ``__cpp_lib_variant``                               ``202102L``
166    --------------------------------------------------- -----------------
167    ``__cpp_lib_void_t``                                ``201411L``
168    --------------------------------------------------- -----------------
169    **C++20**
170    ---------------------------------------------------------------------
171    ``__cpp_lib_array_constexpr``                       ``201811L``
172    --------------------------------------------------- -----------------
173    ``__cpp_lib_assume_aligned``                        ``201811L``
174    --------------------------------------------------- -----------------
175    ``__cpp_lib_atomic_flag_test``                      ``201907L``
176    --------------------------------------------------- -----------------
177    ``__cpp_lib_atomic_float``                          *unimplemented*
178    --------------------------------------------------- -----------------
179    ``__cpp_lib_atomic_lock_free_type_aliases``         ``201907L``
180    --------------------------------------------------- -----------------
181    ``__cpp_lib_atomic_ref``                            *unimplemented*
182    --------------------------------------------------- -----------------
183    ``__cpp_lib_atomic_shared_ptr``                     *unimplemented*
184    --------------------------------------------------- -----------------
185    ``__cpp_lib_atomic_value_initialization``           ``201911L``
186    --------------------------------------------------- -----------------
187    ``__cpp_lib_atomic_wait``                           ``201907L``
188    --------------------------------------------------- -----------------
189    ``__cpp_lib_barrier``                               ``201907L``
190    --------------------------------------------------- -----------------
191    ``__cpp_lib_bind_front``                            ``201907L``
192    --------------------------------------------------- -----------------
193    ``__cpp_lib_bit_cast``                              ``201806L``
194    --------------------------------------------------- -----------------
195    ``__cpp_lib_bitops``                                ``201907L``
196    --------------------------------------------------- -----------------
197    ``__cpp_lib_bounded_array_traits``                  ``201902L``
198    --------------------------------------------------- -----------------
199    ``__cpp_lib_char8_t``                               ``201907L``
200    --------------------------------------------------- -----------------
201    ``__cpp_lib_concepts``                              ``202002L``
202    --------------------------------------------------- -----------------
203    ``__cpp_lib_constexpr_algorithms``                  ``201806L``
204    --------------------------------------------------- -----------------
205    ``__cpp_lib_constexpr_complex``                     ``201711L``
206    --------------------------------------------------- -----------------
207    ``__cpp_lib_constexpr_dynamic_alloc``               ``201907L``
208    --------------------------------------------------- -----------------
209    ``__cpp_lib_constexpr_functional``                  ``201907L``
210    --------------------------------------------------- -----------------
211    ``__cpp_lib_constexpr_iterator``                    ``201811L``
212    --------------------------------------------------- -----------------
213    ``__cpp_lib_constexpr_memory``                      ``201811L``
214    --------------------------------------------------- -----------------
215    ``__cpp_lib_constexpr_numeric``                     ``201911L``
216    --------------------------------------------------- -----------------
217    ``__cpp_lib_constexpr_string``                      ``201907L``
218    --------------------------------------------------- -----------------
219    ``__cpp_lib_constexpr_string_view``                 ``201811L``
220    --------------------------------------------------- -----------------
221    ``__cpp_lib_constexpr_tuple``                       ``201811L``
222    --------------------------------------------------- -----------------
223    ``__cpp_lib_constexpr_utility``                     ``201811L``
224    --------------------------------------------------- -----------------
225    ``__cpp_lib_constexpr_vector``                      ``201907L``
226    --------------------------------------------------- -----------------
227    ``__cpp_lib_coroutine``                             ``201902L``
228    --------------------------------------------------- -----------------
229    ``__cpp_lib_destroying_delete``                     ``201806L``
230    --------------------------------------------------- -----------------
231    ``__cpp_lib_endian``                                ``201907L``
232    --------------------------------------------------- -----------------
233    ``__cpp_lib_erase_if``                              ``202002L``
234    --------------------------------------------------- -----------------
235    ``__cpp_lib_execution``                             *unimplemented*
236    --------------------------------------------------- -----------------
237    ``__cpp_lib_format``                                *unimplemented*
238    --------------------------------------------------- -----------------
239    ``__cpp_lib_format_uchar``                          ``202311L``
240    --------------------------------------------------- -----------------
241    ``__cpp_lib_generic_unordered_lookup``              ``201811L``
242    --------------------------------------------------- -----------------
243    ``__cpp_lib_int_pow2``                              ``202002L``
244    --------------------------------------------------- -----------------
245    ``__cpp_lib_integer_comparison_functions``          ``202002L``
246    --------------------------------------------------- -----------------
247    ``__cpp_lib_interpolate``                           ``201902L``
248    --------------------------------------------------- -----------------
249    ``__cpp_lib_is_constant_evaluated``                 ``201811L``
250    --------------------------------------------------- -----------------
251    ``__cpp_lib_is_layout_compatible``                  *unimplemented*
252    --------------------------------------------------- -----------------
253    ``__cpp_lib_is_nothrow_convertible``                ``201806L``
254    --------------------------------------------------- -----------------
255    ``__cpp_lib_is_pointer_interconvertible``           *unimplemented*
256    --------------------------------------------------- -----------------
257    ``__cpp_lib_jthread``                               ``201911L``
258    --------------------------------------------------- -----------------
259    ``__cpp_lib_latch``                                 ``201907L``
260    --------------------------------------------------- -----------------
261    ``__cpp_lib_list_remove_return_type``               ``201806L``
262    --------------------------------------------------- -----------------
263    ``__cpp_lib_math_constants``                        ``201907L``
264    --------------------------------------------------- -----------------
265    ``__cpp_lib_move_iterator_concept``                 ``202207L``
266    --------------------------------------------------- -----------------
267    ``__cpp_lib_polymorphic_allocator``                 ``201902L``
268    --------------------------------------------------- -----------------
269    ``__cpp_lib_ranges``                                ``202207L``
270    --------------------------------------------------- -----------------
271    ``__cpp_lib_remove_cvref``                          ``201711L``
272    --------------------------------------------------- -----------------
273    ``__cpp_lib_semaphore``                             ``201907L``
274    --------------------------------------------------- -----------------
275    ``__cpp_lib_shared_ptr_arrays``                     ``201707L``
276    --------------------------------------------------- -----------------
277    ``__cpp_lib_shift``                                 ``201806L``
278    --------------------------------------------------- -----------------
279    ``__cpp_lib_smart_ptr_for_overwrite``               *unimplemented*
280    --------------------------------------------------- -----------------
281    ``__cpp_lib_source_location``                       ``201907L``
282    --------------------------------------------------- -----------------
283    ``__cpp_lib_span``                                  ``202002L``
284    --------------------------------------------------- -----------------
285    ``__cpp_lib_ssize``                                 ``201902L``
286    --------------------------------------------------- -----------------
287    ``__cpp_lib_starts_ends_with``                      ``201711L``
288    --------------------------------------------------- -----------------
289    ``__cpp_lib_string_view``                           ``201803L``
290    --------------------------------------------------- -----------------
291    ``__cpp_lib_syncbuf``                               ``201803L``
292    --------------------------------------------------- -----------------
293    ``__cpp_lib_three_way_comparison``                  *unimplemented*
294    --------------------------------------------------- -----------------
295    ``__cpp_lib_to_address``                            ``201711L``
296    --------------------------------------------------- -----------------
297    ``__cpp_lib_to_array``                              ``201907L``
298    --------------------------------------------------- -----------------
299    ``__cpp_lib_type_identity``                         ``201806L``
300    --------------------------------------------------- -----------------
301    ``__cpp_lib_unwrap_ref``                            ``201811L``
302    --------------------------------------------------- -----------------
303    **C++23**
304    ---------------------------------------------------------------------
305    ``__cpp_lib_adaptor_iterator_pair_constructor``     ``202106L``
306    --------------------------------------------------- -----------------
307    ``__cpp_lib_allocate_at_least``                     ``202302L``
308    --------------------------------------------------- -----------------
309    ``__cpp_lib_associative_heterogeneous_erasure``     *unimplemented*
310    --------------------------------------------------- -----------------
311    ``__cpp_lib_bind_back``                             *unimplemented*
312    --------------------------------------------------- -----------------
313    ``__cpp_lib_byteswap``                              ``202110L``
314    --------------------------------------------------- -----------------
315    ``__cpp_lib_constexpr_bitset``                      ``202207L``
316    --------------------------------------------------- -----------------
317    ``__cpp_lib_constexpr_charconv``                    ``202207L``
318    --------------------------------------------------- -----------------
319    ``__cpp_lib_constexpr_cmath``                       *unimplemented*
320    --------------------------------------------------- -----------------
321    ``__cpp_lib_constexpr_memory``                      ``202202L``
322    --------------------------------------------------- -----------------
323    ``__cpp_lib_constexpr_typeinfo``                    ``202106L``
324    --------------------------------------------------- -----------------
325    ``__cpp_lib_expected``                              ``202211L``
326    --------------------------------------------------- -----------------
327    ``__cpp_lib_format_ranges``                         ``202207L``
328    --------------------------------------------------- -----------------
329    ``__cpp_lib_formatters``                            *unimplemented*
330    --------------------------------------------------- -----------------
331    ``__cpp_lib_forward_like``                          ``202207L``
332    --------------------------------------------------- -----------------
333    ``__cpp_lib_invoke_r``                              ``202106L``
334    --------------------------------------------------- -----------------
335    ``__cpp_lib_ios_noreplace``                         ``202207L``
336    --------------------------------------------------- -----------------
337    ``__cpp_lib_is_scoped_enum``                        ``202011L``
338    --------------------------------------------------- -----------------
339    ``__cpp_lib_mdspan``                                ``202207L``
340    --------------------------------------------------- -----------------
341    ``__cpp_lib_move_only_function``                    *unimplemented*
342    --------------------------------------------------- -----------------
343    ``__cpp_lib_optional``                              ``202110L``
344    --------------------------------------------------- -----------------
345    ``__cpp_lib_out_ptr``                               *unimplemented*
346    --------------------------------------------------- -----------------
347    ``__cpp_lib_print``                                 ``202207L``
348    --------------------------------------------------- -----------------
349    ``__cpp_lib_ranges_as_const``                       *unimplemented*
350    --------------------------------------------------- -----------------
351    ``__cpp_lib_ranges_as_rvalue``                      ``202207L``
352    --------------------------------------------------- -----------------
353    ``__cpp_lib_ranges_chunk``                          *unimplemented*
354    --------------------------------------------------- -----------------
355    ``__cpp_lib_ranges_chunk_by``                       ``202202L``
356    --------------------------------------------------- -----------------
357    ``__cpp_lib_ranges_contains``                       ``202207L``
358    --------------------------------------------------- -----------------
359    ``__cpp_lib_ranges_iota``                           *unimplemented*
360    --------------------------------------------------- -----------------
361    ``__cpp_lib_ranges_join_with``                      *unimplemented*
362    --------------------------------------------------- -----------------
363    ``__cpp_lib_ranges_repeat``                         ``202207L``
364    --------------------------------------------------- -----------------
365    ``__cpp_lib_ranges_slide``                          *unimplemented*
366    --------------------------------------------------- -----------------
367    ``__cpp_lib_ranges_starts_ends_with``               ``202106L``
368    --------------------------------------------------- -----------------
369    ``__cpp_lib_ranges_to_container``                   ``202202L``
370    --------------------------------------------------- -----------------
371    ``__cpp_lib_ranges_zip``                            *unimplemented*
372    --------------------------------------------------- -----------------
373    ``__cpp_lib_reference_from_temporary``              *unimplemented*
374    --------------------------------------------------- -----------------
375    ``__cpp_lib_spanstream``                            *unimplemented*
376    --------------------------------------------------- -----------------
377    ``__cpp_lib_stacktrace``                            *unimplemented*
378    --------------------------------------------------- -----------------
379    ``__cpp_lib_stdatomic_h``                           ``202011L``
380    --------------------------------------------------- -----------------
381    ``__cpp_lib_string_contains``                       ``202011L``
382    --------------------------------------------------- -----------------
383    ``__cpp_lib_string_resize_and_overwrite``           ``202110L``
384    --------------------------------------------------- -----------------
385    ``__cpp_lib_to_string``                             *unimplemented*
386    --------------------------------------------------- -----------------
387    ``__cpp_lib_to_underlying``                         ``202102L``
388    --------------------------------------------------- -----------------
389    ``__cpp_lib_tuple_like``                            *unimplemented*
390    --------------------------------------------------- -----------------
391    ``__cpp_lib_unreachable``                           ``202202L``
392    --------------------------------------------------- -----------------
393    **C++26**
394    ---------------------------------------------------------------------
395    ``__cpp_lib_associative_heterogeneous_insertion``   *unimplemented*
396    --------------------------------------------------- -----------------
397    ``__cpp_lib_bind_back``                             *unimplemented*
398    --------------------------------------------------- -----------------
399    ``__cpp_lib_bind_front``                            ``202306L``
400    --------------------------------------------------- -----------------
401    ``__cpp_lib_bitset``                                ``202306L``
402    --------------------------------------------------- -----------------
403    ``__cpp_lib_copyable_function``                     *unimplemented*
404    --------------------------------------------------- -----------------
405    ``__cpp_lib_debugging``                             *unimplemented*
406    --------------------------------------------------- -----------------
407    ``__cpp_lib_freestanding_algorithm``                *unimplemented*
408    --------------------------------------------------- -----------------
409    ``__cpp_lib_freestanding_array``                    *unimplemented*
410    --------------------------------------------------- -----------------
411    ``__cpp_lib_freestanding_cstring``                  *unimplemented*
412    --------------------------------------------------- -----------------
413    ``__cpp_lib_freestanding_expected``                 *unimplemented*
414    --------------------------------------------------- -----------------
415    ``__cpp_lib_freestanding_mdspan``                   *unimplemented*
416    --------------------------------------------------- -----------------
417    ``__cpp_lib_freestanding_optional``                 *unimplemented*
418    --------------------------------------------------- -----------------
419    ``__cpp_lib_freestanding_string_view``              *unimplemented*
420    --------------------------------------------------- -----------------
421    ``__cpp_lib_freestanding_variant``                  *unimplemented*
422    --------------------------------------------------- -----------------
423    ``__cpp_lib_fstream_native_handle``                 ``202306L``
424    --------------------------------------------------- -----------------
425    ``__cpp_lib_function_ref``                          *unimplemented*
426    --------------------------------------------------- -----------------
427    ``__cpp_lib_hazard_pointer``                        *unimplemented*
428    --------------------------------------------------- -----------------
429    ``__cpp_lib_linalg``                                *unimplemented*
430    --------------------------------------------------- -----------------
431    ``__cpp_lib_out_ptr``                               *unimplemented*
432    --------------------------------------------------- -----------------
433    ``__cpp_lib_ratio``                                 ``202306L``
434    --------------------------------------------------- -----------------
435    ``__cpp_lib_rcu``                                   *unimplemented*
436    --------------------------------------------------- -----------------
437    ``__cpp_lib_saturation_arithmetic``                 ``202311L``
438    --------------------------------------------------- -----------------
439    ``__cpp_lib_smart_ptr_owner_equality``              *unimplemented*
440    --------------------------------------------------- -----------------
441    ``__cpp_lib_span_at``                               ``202311L``
442    --------------------------------------------------- -----------------
443    ``__cpp_lib_span_initializer_list``                 ``202311L``
444    --------------------------------------------------- -----------------
445    ``__cpp_lib_sstream_from_string_view``              ``202306L``
446    --------------------------------------------------- -----------------
447    ``__cpp_lib_submdspan``                             *unimplemented*
448    --------------------------------------------------- -----------------
449    ``__cpp_lib_text_encoding``                         *unimplemented*
450    --------------------------------------------------- -----------------
451    ``__cpp_lib_to_chars``                              *unimplemented*
452    --------------------------------------------------- -----------------
453    ``__cpp_lib_tuple_like``                            *unimplemented*
454    --------------------------------------------------- -----------------
455    ``__cpp_lib_within_lifetime``                       *unimplemented*
456    =================================================== =================
457
458