# Library feature-test macros (C++20)

From cppreference.com
< cpp‎ | utility

Each of following macros is defined if the header `<version>` or one of the corresponding headers specified in the table is included.

Macro name | Value | Header
--- | --- | ---
`__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` | 201603L | `<iterator>` `<array>`
`__cpp_lib_as_const` | 201510L | `<utility>`
`__cpp_lib_atomic_is_always_lock_free` | 201603L | `<atomic>`
`__cpp_lib_atomic_ref` | 201806L | `<atomic>`
`__cpp_lib_bit_cast` | 201806L | `<bit>`
`__cpp_lib_bind_front` | 201811L | `<functional>`
`__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` | 201811L | `<atomic>` `<filesystem>` `<istream>` `<limits>` `<locale>` `<ostream>` `<string>` `<string_view>`
`__cpp_lib_chrono` | 201611L | `<chrono>`
`__cpp_lib_clamp` | 201603L | `<algorithm>`
`__cpp_lib_complex_udls` | 201309L | `<complex>`
`__cpp_lib_concepts` | 201806L | `<concepts>`
`__cpp_lib_constexpr_misc` | 201811L | `<array>` `<functional>` `<iterator>` `<string_view>` `<tuple>` `<utility>`
`__cpp_lib_constexpr_swap_algorithms` | 201806L | `<algorithm>`
`__cpp_lib_enable_shared_from_this` | 201603L | `<memory>`
`__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_gcd_lcm` | 201606L | `<numeric>`
`__cpp_lib_generic_associative_lookup` | 201304L | `<map>` `<set>`
`__cpp_lib_generic_unordered_lookup` | 201811L | `<unordered_map>` `<unordered_set>`
`__cpp_lib_generic_unordered_hash_lookup` | 201902L | `<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_integer_sequence` | 201304L | `<utility>`
`__cpp_lib_integral_constant_callable` | 201304L | `<type_traits>`
`__cpp_lib_invoke` | 201411L | `<functional>`
`__cpp_lib_interpolate` | 201902L | `<cmath>` `<numeric>`
`__cpp_lib_is_constant_evaluated` | 201811L | `<type_traits>`
`__cpp_lib_is_aggregate` | 201703L | `<type_traits>`
`__cpp_lib_is_final` | 201402L | `<type_traits>`
`__cpp_lib_is_invocable` | 201703L | `<type_traits>`
`__cpp_lib_is_null_pointer` | 201309L | `<type_traits>`
`__cpp_lib_is_swappable` | 201603L | `<type_traits>`
`__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_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_null_iterators` | 201304L | `<iterator>`
`__cpp_lib_optional` | 201606L | `<optional>`
`__cpp_lib_parallel_algorithm` | 201603L | `<algorithm>` `<numeric>`
`__cpp_lib_quoted_string_io` | 201304L | `<iomanip>`
`__cpp_lib_ranges` | 201811L | `<algorithm>` `<functional>` `<iterator>` `<memory>` `<ranges>`
`__cpp_lib_raw_memory_algorithms` | 201606L | `<memory>`
`__cpp_lib_result_of_sfinae` | 201210L | `<functional>` `<type_traits>`
`__cpp_lib_robust_nonmodifying_seq_ops` | 201304L | `<algorithm>`
`__cpp_lib_sample` | 201603L | `<algorithm>`
`__cpp_lib_scoped_lock` | 201703L | `<mutex>`
`__cpp_lib_shared_mutex` | 201505L | `<shared_mutex>`
`__cpp_lib_shared_ptr_arrays` | 201611L | `<memory>`
`__cpp_lib_shared_ptr_weak_type` | 201606L | `<memory>`
`__cpp_lib_shared_timed_mutex` | 201402L | `<shared_mutex>`
`__cpp_lib_string_udls` | 201304L | `<string>`
`__cpp_lib_string_view` | 201606L | `<string>` `<string_view>`
`__cpp_lib_three_way_comparison` | 201711L | `<compare>`
`__cpp_lib_to_chars` | 201611L | `<utility>`
`__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 | `<utility>` `<tuple>`
`__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_variant` | 201606L | `<variant>`
`__cpp_lib_void_t` | 201411L | `<type_traits>`

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/utility/feature_test&oldid=109950"