1 .. _FeatureTestMacroTable:
3 ==========================
4 Feature Test Macro Support
5 ==========================
13 This file documents the feature test macros currently supported by libc++.
20 .. table:: Current Status
21 :name: feature-status-table
24 =================================================== =================
26 =================================================== =================
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 --------------------------------------------------- -----------------
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 --------------------------------------------------- -----------------
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 --------------------------------------------------- -----------------
304 ---------------------------------------------------------------------
305 ``__cpp_lib_adaptor_iterator_pair_constructor`` ``202106L``
306 --------------------------------------------------- -----------------
307 ``__cpp_lib_allocate_at_least`` ``202106L``
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_iota`` *unimplemented*
358 --------------------------------------------------- -----------------
359 ``__cpp_lib_ranges_join_with`` *unimplemented*
360 --------------------------------------------------- -----------------
361 ``__cpp_lib_ranges_repeat`` ``202207L``
362 --------------------------------------------------- -----------------
363 ``__cpp_lib_ranges_slide`` *unimplemented*
364 --------------------------------------------------- -----------------
365 ``__cpp_lib_ranges_starts_ends_with`` *unimplemented*
366 --------------------------------------------------- -----------------
367 ``__cpp_lib_ranges_to_container`` ``202202L``
368 --------------------------------------------------- -----------------
369 ``__cpp_lib_ranges_zip`` *unimplemented*
370 --------------------------------------------------- -----------------
371 ``__cpp_lib_reference_from_temporary`` *unimplemented*
372 --------------------------------------------------- -----------------
373 ``__cpp_lib_spanstream`` *unimplemented*
374 --------------------------------------------------- -----------------
375 ``__cpp_lib_stacktrace`` *unimplemented*
376 --------------------------------------------------- -----------------
377 ``__cpp_lib_stdatomic_h`` ``202011L``
378 --------------------------------------------------- -----------------
379 ``__cpp_lib_string_contains`` ``202011L``
380 --------------------------------------------------- -----------------
381 ``__cpp_lib_string_resize_and_overwrite`` ``202110L``
382 --------------------------------------------------- -----------------
383 ``__cpp_lib_to_string`` *unimplemented*
384 --------------------------------------------------- -----------------
385 ``__cpp_lib_to_underlying`` ``202102L``
386 --------------------------------------------------- -----------------
387 ``__cpp_lib_tuple_like`` *unimplemented*
388 --------------------------------------------------- -----------------
389 ``__cpp_lib_unreachable`` ``202202L``
390 --------------------------------------------------- -----------------
392 ---------------------------------------------------------------------
393 ``__cpp_lib_associative_heterogeneous_insertion`` *unimplemented*
394 --------------------------------------------------- -----------------
395 ``__cpp_lib_bind_back`` *unimplemented*
396 --------------------------------------------------- -----------------
397 ``__cpp_lib_bind_front`` ``202306L``
398 --------------------------------------------------- -----------------
399 ``__cpp_lib_bitset`` ``202306L``
400 --------------------------------------------------- -----------------
401 ``__cpp_lib_copyable_function`` *unimplemented*
402 --------------------------------------------------- -----------------
403 ``__cpp_lib_debugging`` *unimplemented*
404 --------------------------------------------------- -----------------
405 ``__cpp_lib_freestanding_algorithm`` *unimplemented*
406 --------------------------------------------------- -----------------
407 ``__cpp_lib_freestanding_array`` *unimplemented*
408 --------------------------------------------------- -----------------
409 ``__cpp_lib_freestanding_cstring`` *unimplemented*
410 --------------------------------------------------- -----------------
411 ``__cpp_lib_freestanding_expected`` *unimplemented*
412 --------------------------------------------------- -----------------
413 ``__cpp_lib_freestanding_mdspan`` *unimplemented*
414 --------------------------------------------------- -----------------
415 ``__cpp_lib_freestanding_optional`` *unimplemented*
416 --------------------------------------------------- -----------------
417 ``__cpp_lib_freestanding_string_view`` *unimplemented*
418 --------------------------------------------------- -----------------
419 ``__cpp_lib_freestanding_variant`` *unimplemented*
420 --------------------------------------------------- -----------------
421 ``__cpp_lib_fstream_native_handle`` ``202306L``
422 --------------------------------------------------- -----------------
423 ``__cpp_lib_function_ref`` *unimplemented*
424 --------------------------------------------------- -----------------
425 ``__cpp_lib_hazard_pointer`` *unimplemented*
426 --------------------------------------------------- -----------------
427 ``__cpp_lib_linalg`` *unimplemented*
428 --------------------------------------------------- -----------------
429 ``__cpp_lib_out_ptr`` *unimplemented*
430 --------------------------------------------------- -----------------
431 ``__cpp_lib_ratio`` ``202306L``
432 --------------------------------------------------- -----------------
433 ``__cpp_lib_rcu`` *unimplemented*
434 --------------------------------------------------- -----------------
435 ``__cpp_lib_saturation_arithmetic`` *unimplemented*
436 --------------------------------------------------- -----------------
437 ``__cpp_lib_smart_ptr_owner_equality`` *unimplemented*
438 --------------------------------------------------- -----------------
439 ``__cpp_lib_span_at`` ``202311L``
440 --------------------------------------------------- -----------------
441 ``__cpp_lib_span_initializer_list`` *unimplemented*
442 --------------------------------------------------- -----------------
443 ``__cpp_lib_sstream_from_string_view`` *unimplemented*
444 --------------------------------------------------- -----------------
445 ``__cpp_lib_submdspan`` *unimplemented*
446 --------------------------------------------------- -----------------
447 ``__cpp_lib_text_encoding`` *unimplemented*
448 --------------------------------------------------- -----------------
449 ``__cpp_lib_to_chars`` *unimplemented*
450 --------------------------------------------------- -----------------
451 ``__cpp_lib_tuple_like`` *unimplemented*
452 --------------------------------------------------- -----------------
453 ``__cpp_lib_within_lifetime`` *unimplemented*
454 =================================================== =================