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