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``                *unimplemented*
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``          *unimplemented*
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``                     *unimplemented*
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``                      *unimplemented*
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``                            *unimplemented*
194    ------------------------------------------------- -----------------
195    ``__cpp_lib_bitops``                              *unimplemented*
196    ------------------------------------------------- -----------------
197    ``__cpp_lib_bounded_array_traits``                ``201902L``
198    ------------------------------------------------- -----------------
199    ``__cpp_lib_char8_t``                             ``201811L``
200    ------------------------------------------------- -----------------
201    ``__cpp_lib_concepts``                            ``202002L``
202    ------------------------------------------------- -----------------
203    ``__cpp_lib_constexpr_algorithms``                ``201806L``
204    ------------------------------------------------- -----------------
205    ``__cpp_lib_constexpr_complex``                   *unimplemented*
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``                    ``201811L``
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``                    *unimplemented*
226    ------------------------------------------------- -----------------
227    ``__cpp_lib_coroutine``                           *unimplemented*
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_generic_unordered_lookup``            ``201811L``
240    ------------------------------------------------- -----------------
241    ``__cpp_lib_int_pow2``                            ``202002L``
242    ------------------------------------------------- -----------------
243    ``__cpp_lib_integer_comparison_functions``        ``202002L``
244    ------------------------------------------------- -----------------
245    ``__cpp_lib_interpolate``                         ``201902L``
246    ------------------------------------------------- -----------------
247    ``__cpp_lib_is_constant_evaluated``               ``201811L``
248    ------------------------------------------------- -----------------
249    ``__cpp_lib_is_layout_compatible``                *unimplemented*
250    ------------------------------------------------- -----------------
251    ``__cpp_lib_is_nothrow_convertible``              ``201806L``
252    ------------------------------------------------- -----------------
253    ``__cpp_lib_is_pointer_interconvertible``         *unimplemented*
254    ------------------------------------------------- -----------------
255    ``__cpp_lib_jthread``                             *unimplemented*
256    ------------------------------------------------- -----------------
257    ``__cpp_lib_latch``                               ``201907L``
258    ------------------------------------------------- -----------------
259    ``__cpp_lib_list_remove_return_type``             ``201806L``
260    ------------------------------------------------- -----------------
261    ``__cpp_lib_math_constants``                      ``201907L``
262    ------------------------------------------------- -----------------
263    ``__cpp_lib_polymorphic_allocator``               *unimplemented*
264    ------------------------------------------------- -----------------
265    ``__cpp_lib_ranges``                              *unimplemented*
266    ------------------------------------------------- -----------------
267    ``__cpp_lib_remove_cvref``                        ``201711L``
268    ------------------------------------------------- -----------------
269    ``__cpp_lib_semaphore``                           ``201907L``
270    ------------------------------------------------- -----------------
271    ``__cpp_lib_shift``                               ``201806L``
272    ------------------------------------------------- -----------------
273    ``__cpp_lib_smart_ptr_for_overwrite``             *unimplemented*
274    ------------------------------------------------- -----------------
275    ``__cpp_lib_source_location``                     *unimplemented*
276    ------------------------------------------------- -----------------
277    ``__cpp_lib_span``                                ``202002L``
278    ------------------------------------------------- -----------------
279    ``__cpp_lib_ssize``                               ``201902L``
280    ------------------------------------------------- -----------------
281    ``__cpp_lib_starts_ends_with``                    ``201711L``
282    ------------------------------------------------- -----------------
283    ``__cpp_lib_string_view``                         ``201803L``
284    ------------------------------------------------- -----------------
285    ``__cpp_lib_syncbuf``                             *unimplemented*
286    ------------------------------------------------- -----------------
287    ``__cpp_lib_three_way_comparison``                *unimplemented*
288    ------------------------------------------------- -----------------
289    ``__cpp_lib_to_address``                          ``201711L``
290    ------------------------------------------------- -----------------
291    ``__cpp_lib_to_array``                            ``201907L``
292    ------------------------------------------------- -----------------
293    ``__cpp_lib_unwrap_ref``                          ``201811L``
294    ------------------------------------------------- -----------------
295    **C++ 2b**
296    -------------------------------------------------------------------
297    ``__cpp_lib_is_scoped_enum``                      ``202011L``
298    ------------------------------------------------- -----------------
299    ``__cpp_lib_stacktrace``                          *unimplemented*
300    ------------------------------------------------- -----------------
301    ``__cpp_lib_stdatomic_h``                         *unimplemented*
302    ------------------------------------------------- -----------------
303    ``__cpp_lib_string_contains``                     ``202011L``
304    ------------------------------------------------- -----------------
305    ``__cpp_lib_to_underlying``                       ``202102L``
306    ================================================= =================
307
308