358 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
			
		
		
	
	
			358 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
| .. _FeatureTestMacroTable:
 | |
| 
 | |
| ==========================
 | |
| Feature Test Macro Support
 | |
| ==========================
 | |
| 
 | |
| .. contents::
 | |
|    :local:
 | |
| 
 | |
| Overview
 | |
| ========
 | |
| 
 | |
| This file documents the feature test macros currently supported by libc++.
 | |
| 
 | |
| .. _feature-status:
 | |
| 
 | |
| Status
 | |
| ======
 | |
| 
 | |
| .. table:: Current Status
 | |
|     :name: feature-status-table
 | |
|     :widths: auto
 | |
| 
 | |
|     ================================================= =================
 | |
|     Macro Name                                        Value
 | |
|     ================================================= =================
 | |
|     **C++ 14**
 | |
|     -------------------------------------------------------------------
 | |
|     ``__cpp_lib_chrono_udls``                         ``201304L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_complex_udls``                        ``201309L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_exchange_function``                   ``201304L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_generic_associative_lookup``          ``201304L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_integer_sequence``                    ``201304L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_integral_constant_callable``          ``201304L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_is_final``                            ``201402L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_is_null_pointer``                     ``201309L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_make_reverse_iterator``               ``201402L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_make_unique``                         ``201304L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_null_iterators``                      ``201304L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_quoted_string_io``                    ``201304L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_result_of_sfinae``                    ``201210L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_robust_nonmodifying_seq_ops``         ``201304L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_shared_timed_mutex``                  ``201402L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_string_udls``                         ``201304L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_transformation_trait_aliases``        ``201304L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_transparent_operators``               ``201210L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_tuple_element_t``                     ``201402L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_tuples_by_type``                      ``201304L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     **C++ 17**
 | |
|     -------------------------------------------------------------------
 | |
|     ``__cpp_lib_addressof_constexpr``                 ``201603L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_allocator_traits_is_always_equal``    ``201411L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_any``                                 ``201606L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_apply``                               ``201603L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_array_constexpr``                     ``201603L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_as_const``                            ``201510L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_atomic_is_always_lock_free``          ``201603L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_bool_constant``                       ``201505L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_boyer_moore_searcher``                ``201603L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_byte``                                ``201603L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_chrono``                              ``201611L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_clamp``                               ``201603L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_enable_shared_from_this``             ``201603L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_execution``                           *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_filesystem``                          ``201703L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_gcd_lcm``                             ``201606L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_hardware_interference_size``          ``201703L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_has_unique_object_representations``   ``201606L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_hypot``                               ``201603L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_incomplete_container_elements``       ``201505L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_invoke``                              ``201411L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_is_aggregate``                        ``201703L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_is_invocable``                        ``201703L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_is_swappable``                        ``201603L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_launder``                             ``201606L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_logical_traits``                      ``201510L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_make_from_tuple``                     ``201606L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_map_try_emplace``                     ``201411L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_math_special_functions``              *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_memory_resource``                     *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_node_extract``                        ``201606L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_nonmember_container_access``          ``201411L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_not_fn``                              ``201603L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_optional``                            ``201606L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_parallel_algorithm``                  *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_raw_memory_algorithms``               ``201606L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_sample``                              ``201603L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_scoped_lock``                         ``201703L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_shared_mutex``                        ``201505L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_shared_ptr_arrays``                   ``201611L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_shared_ptr_weak_type``                ``201606L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_string_view``                         ``201606L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_to_chars``                            *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_transparent_operators``               ``201510L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_type_trait_variable_templates``       ``201510L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_uncaught_exceptions``                 ``201411L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_unordered_map_try_emplace``           ``201411L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_variant``                             ``202102L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_void_t``                              ``201411L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     **C++ 20**
 | |
|     -------------------------------------------------------------------
 | |
|     ``__cpp_lib_array_constexpr``                     ``201811L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_assume_aligned``                      ``201811L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_atomic_flag_test``                    ``201907L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_atomic_float``                        *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_atomic_lock_free_type_aliases``       ``201907L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_atomic_ref``                          *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_atomic_shared_ptr``                   *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_atomic_value_initialization``         ``201911L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_atomic_wait``                         ``201907L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_barrier``                             ``201907L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_bind_front``                          ``201907L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_bit_cast``                            ``201806L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_bitops``                              *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_bounded_array_traits``                ``201902L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_char8_t``                             ``201811L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_concepts``                            ``202002L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_constexpr_algorithms``                ``201806L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_constexpr_complex``                   *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_constexpr_dynamic_alloc``             ``201907L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_constexpr_functional``                ``201907L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_constexpr_iterator``                  ``201811L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_constexpr_memory``                    ``201811L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_constexpr_numeric``                   ``201911L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_constexpr_string``                    ``201907L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_constexpr_string_view``               ``201811L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_constexpr_tuple``                     ``201811L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_constexpr_utility``                   ``201811L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_constexpr_vector``                    *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_coroutine``                           ``201902L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_destroying_delete``                   ``201806L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_endian``                              ``201907L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_erase_if``                            ``202002L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_execution``                           *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_format``                              *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_generic_unordered_lookup``            ``201811L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_int_pow2``                            ``202002L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_integer_comparison_functions``        ``202002L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_interpolate``                         ``201902L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_is_constant_evaluated``               ``201811L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_is_layout_compatible``                *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_is_nothrow_convertible``              ``201806L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_is_pointer_interconvertible``         *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_jthread``                             *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_latch``                               ``201907L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_list_remove_return_type``             ``201806L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_math_constants``                      ``201907L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_polymorphic_allocator``               *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_ranges``                              *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_remove_cvref``                        ``201711L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_semaphore``                           ``201907L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_shared_ptr_arrays``                   ``201707L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_shift``                               ``201806L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_smart_ptr_for_overwrite``             *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_source_location``                     *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_span``                                ``202002L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_ssize``                               ``201902L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_starts_ends_with``                    ``201711L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_string_view``                         ``201803L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_syncbuf``                             *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_three_way_comparison``                *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_to_address``                          ``201711L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_to_array``                            ``201907L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_type_identity``                       ``201806L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_unwrap_ref``                          ``201811L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     **C++ 2b**
 | |
|     -------------------------------------------------------------------
 | |
|     ``__cpp_lib_adaptor_iterator_pair_constructor``   ``202106L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_allocate_at_least``                   ``202106L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_associative_heterogeneous_erasure``   *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_bind_back``                           *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_byteswap``                            ``202110L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_constexpr_cmath``                     *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_constexpr_typeinfo``                  *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_invoke_r``                            *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_is_scoped_enum``                      ``202011L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_move_only_function``                  *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_optional``                            ``202110L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_out_ptr``                             *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_ranges_chunk``                        *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_ranges_chunk_by``                     *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_ranges_iota``                         *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_ranges_join_with``                    *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_ranges_slide``                        *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_ranges_starts_ends_with``             *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_ranges_to_container``                 *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_ranges_zip``                          *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_reference_from_temporary``            *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_spanstream``                          *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_stacktrace``                          *unimplemented*
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_stdatomic_h``                         ``202011L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_string_contains``                     ``202011L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_string_resize_and_overwrite``         ``202110L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_to_underlying``                       ``202102L``
 | |
|     ------------------------------------------------- -----------------
 | |
|     ``__cpp_lib_unreachable``                         ``202202L``
 | |
|     ================================================= =================
 | |
| 
 |