# 库特性测试宏 (C++20)

< cpp‎ | utility

若包含头文件 `<version>` 或指定于表中的头文件之一，则定义对应的宏。

宏名 | 值 | 头文件
--- | --- | ---
`__cpp_lib_addressof_constexpr` | 201603L | `<memory>`
`__cpp_lib_allocator_traits_is_always_equal` | 201411L | `<memory>` `<scoped_allocator>` `<string>` `<deque>` `<forward_list>` `<list>` `<vector>` `<map>` `<set>` `<unordered_map>` `<unordered_set>`
`__cpp_lib_any` | 201606L | `<any>`
`__cpp_lib_apply` | 201603L | `<tuple>`
`__cpp_lib_array_constexpr` | 201811L | `<iterator>` `<array>`
`__cpp_lib_as_const` | 201510L | `<utility>`
`__cpp_lib_assume_aligned` | 201811L | `<memory>`
`__cpp_lib_atomic_flag_test` | 201907L | `<atomic>`
`__cpp_lib_atomic_float` | 201711L | `<atomic>`
`__cpp_lib_atomic_is_always_lock_free` | 201603L | `<atomic>`
`__cpp_lib_atomic_lock_free_type_aliases` | 201907L | `<atomic>`
`__cpp_lib_atomic_ref` | 201806L | `<atomic>`
`__cpp_lib_atomic_shared_ptr` | 201711L | `<memory>`
`__cpp_lib_atomic_value_initialization` | 201911L | `<atomic>` `<memory>`
`__cpp_lib_atomic_wait` | 201907L | `<atomic>`
`__cpp_lib_barrier` | 201907L | `<barrier>`
`__cpp_lib_bind_front` | 201907L | `<functional>`
`__cpp_lib_bit_cast` | 201806L | `<bit>`
`__cpp_lib_bitops` | 201907L | `<bit>`
`__cpp_lib_bool_constant` | 201505L | `<type_traits>`
`__cpp_lib_bounded_array_traits` | 201902L | `<type_traits>`
`__cpp_lib_boyer_moore_searcher` | 201603L | `<functional>`
`__cpp_lib_byte` | 201603L | `<cstddef>`
`__cpp_lib_char8_t` | 201907L | `<atomic>` `<filesystem>` `<istream>` `<limits>` `<locale>` `<ostream>` `<string>` `<string_view>`
`__cpp_lib_chrono` | 201907L | `<chrono>`
`__cpp_lib_chrono_udls` | 201304L | `<chrono>`
`__cpp_lib_clamp` | 201603L | `<algorithm>`
`__cpp_lib_complex_udls` | 201309L | `<complex>`
`__cpp_lib_concepts` | 201907L | `<concepts>`
`__cpp_lib_constexpr_algorithms` | 201806L | `<algorithm>`
`__cpp_lib_constexpr_complex` | 201711L | `<complex>`
`__cpp_lib_constexpr_dynamic_alloc` | 201907L | `<memory>`
`__cpp_lib_constexpr_functional` | 201907L | `<functional>`
`__cpp_lib_constexpr_iterator` | 201811L | `<iterator>`
`__cpp_lib_constexpr_memory` | 201811L | `<memory>`
`__cpp_lib_constexpr_numeric` | 201911L | `<numeric>`
`__cpp_lib_constexpr_string` | 201907L | `<string>`
`__cpp_lib_constexpr_string_view` | 201811L | `<string_view>`
`__cpp_lib_constexpr_tuple` | 201811L | `<tuple>`
`__cpp_lib_constexpr_utility` | 201811L | `<utility>`
`__cpp_lib_constexpr_vector` | 201907L | `<vector>`
`__cpp_lib_destroying_delete` | 201806L | `<new>`
`__cpp_lib_enable_shared_from_this` | 201603L | `<memory>`
`__cpp_lib_endian` | 201907L | `<bit>`
`__cpp_lib_erase_if` | 201811L | `<string>` `<deque>` `<forward_list>` `<list>` `<vector>` `<map>` `<set>` `<unordered_map>` `<unordered_set>`
`__cpp_lib_exchange_function` | 201304L | `<utility>`
`__cpp_lib_execution` | 201902L | `<execution>`
`__cpp_lib_filesystem` | 201703L | `<filesystem>`
`__cpp_lib_format` | 201907L | `<format>`
`__cpp_lib_gcd_lcm` | 201606L | `<numeric>`
`__cpp_lib_generic_associative_lookup` | 201304L | `<map>` `<set>`
`__cpp_lib_generic_unordered_lookup` | 201811L | `<unordered_map>` `<unordered_set>`
`__cpp_lib_hardware_interference_size` | 201703L | `<new>`
`__cpp_lib_has_unique_object_representations` | 201606L | `<type_traits>`
`__cpp_lib_hypot` | 201603L | `<cmath>`
`__cpp_lib_incomplete_container_elements` | 201505L | `<forward_list>` `<list>` `<vector>`
`__cpp_lib_int_pow2` | 201806L | `<bit>`
`__cpp_lib_integer_sequence` | 201304L | `<utility>`
`__cpp_lib_integral_constant_callable` | 201304L | `<type_traits>`
`__cpp_lib_interpolate` | 201902L | `<cmath>` `<numeric>`
`__cpp_lib_invoke` | 201411L | `<functional>`
`__cpp_lib_is_aggregate` | 201703L | `<type_traits>`
`__cpp_lib_is_constant_evaluated` | 201811L | `<type_traits>`
`__cpp_lib_is_final` | 201402L | `<type_traits>`
`__cpp_lib_is_invocable` | 201703L | `<type_traits>`
`__cpp_lib_is_layout_compatible` | 201907L | `<type_traits>`
`__cpp_lib_is_null_pointer` | 201309L | `<type_traits>`
`__cpp_lib_is_pointer_interconvertible` | 201907L | `<type_traits>`
`__cpp_lib_is_swappable` | 201603L | `<type_traits>`
`__cpp_lib_jthread` | 201911L | `<stop_token>` `<thread>`
`__cpp_lib_latch` | 201907L | `<latch>`
`__cpp_lib_launder` | 201606L | `<new>`
`__cpp_lib_list_remove_return_type` | 201806L | `<forward_list>` `<list>`
`__cpp_lib_logical_traits` | 201510L | `<type_traits>`
`__cpp_lib_make_from_tuple` | 201606L | `<tuple>`
`__cpp_lib_make_reverse_iterator` | 201402L | `<iterator>`
`__cpp_lib_make_unique` | 201304L | `<memory>`
`__cpp_lib_map_try_emplace` | 201411L | `<map>`
`__cpp_lib_math_constants` | 201907L | `<numbers>`
`__cpp_lib_math_special_functions` | 201603L | `<cmath>`
`__cpp_lib_memory_resource` | 201603L | `<memory_resource>`
`__cpp_lib_node_extract` | 201606L | `<map>` `<set>` `<unordered_map>` `<unordered_set>`
`__cpp_lib_nonmember_container_access` | 201411L | `<iterator>` `<array>` `<deque>` `<forward_list>` `<list>` `<map>` `<regex>` `<set>` `<string>` `<unordered_map>` `<unordered_set>` `<vector>`
`__cpp_lib_not_fn` | 201603L | `<functional>`
`__cpp_lib_nothrow_convertible` | 201806L | `<type_traits>`
`__cpp_lib_null_iterators` | 201304L | `<iterator>`
`__cpp_lib_optional` | 201606L | `<optional>`
`__cpp_lib_parallel_algorithm` | 201603L | `<algorithm>` `<numeric>`
`__cpp_lib_polymorphic_allocator` | 201902L | `<memory>`
`__cpp_lib_quoted_string_io` | 201304L | `<iomanip>`
`__cpp_lib_ranges` | 201911L | `<algorithm>` `<functional>` `<iterator>` `<memory>` `<ranges>`
`__cpp_lib_raw_memory_algorithms` | 201606L | `<memory>`
`__cpp_lib_remove_cvref` | 201711L | `<type_traits>`
`__cpp_lib_result_of_sfinae` | 201210L | `<type_traits>` `<functional>`
`__cpp_lib_robust_nonmodifying_seq_ops` | 201304L | `<algorithm>`
`__cpp_lib_sample` | 201603L | `<algorithm>`
`__cpp_lib_scoped_lock` | 201703L | `<mutex>`
`__cpp_lib_semaphore` | 201907L | `<semaphore>`
`__cpp_lib_shared_mutex` | 201505L | `<shared_mutex>`
`__cpp_lib_shared_ptr_arrays` | 201707L | `<memory>`
`__cpp_lib_shared_ptr_weak_type` | 201606L | `<memory>`
`__cpp_lib_shared_timed_mutex` | 201402L | `<shared_mutex>`
`__cpp_lib_shift` | 201806L | `<algorithm>`
`__cpp_lib_smart_ptr_for_overwrite` | 201811L | `<memory>`
`__cpp_lib_source_location` | 201907L | `<source_location>`
`__cpp_lib_span` | 201902L | `<span>`
`__cpp_lib_ssize` | 201902L | `<iterator>`
`__cpp_lib_starts_ends_with` | 201711L | `<string>` `<string_view>`
`__cpp_lib_string_udls` | 201304L | `<string>`
`__cpp_lib_string_view` | 201803L | `<string>` `<string_view>`
`__cpp_lib_syncbuf` | 201803L | `<syncstream>`
`__cpp_lib_three_way_comparison` | 201907L | `<compare>`
`__cpp_lib_to_address` | 201711L | `<memory>`
`__cpp_lib_to_array` | 201907L | `<array>`
`__cpp_lib_to_chars` | 201611L | `<charconv>`
`__cpp_lib_transformation_trait_aliases` | 201304L | `<type_traits>`
`__cpp_lib_transparent_operators` | 201510L | `<memory>` `<functional>`
`__cpp_lib_tuple_element_t` | 201402L | `<tuple>`
`__cpp_lib_tuples_by_type` | 201304L | `<tuple>` `<utility>`
`__cpp_lib_type_identity` | 201806L | `<type_traits>`
`__cpp_lib_type_trait_variable_templates` | 201510L | `<type_traits>`
`__cpp_lib_uncaught_exceptions` | 201411L | `<exception>`
`__cpp_lib_unordered_map_try_emplace` | 201411L | `<unordered_map>`
`__cpp_lib_unwrap_ref` | 201811L | `<type_traits>`
`__cpp_lib_variant` | 201606L | `<variant>`
`__cpp_lib_void_t` | 201411L | `<type_traits>`