On this page
Library feature-test macros (since C++20)
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_adaptor_iterator_pair_constructor |
202106L | <stack> <queue> |
__cpp_lib_addressof_constexpr |
201603L | <memory> |
__cpp_lib_algorithm_iterator_requirements |
202207L | <algorithm> <numeric> <memory> |
__cpp_lib_allocate_at_least |
202302L | <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_associative_heterogeneous_erasure |
202110L | <map> <set> <unordered_map> <unordered_set> |
__cpp_lib_associative_heterogeneous_insertion |
202306L | <map> <set> <unordered_map> <unordered_set> |
__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 |
202302L | <barrier> |
__cpp_lib_bind_back |
202306L | <functional> |
__cpp_lib_bind_front |
202306L | <functional> |
__cpp_lib_bit_cast |
201806L | <bit> |
__cpp_lib_bitops |
201907L | <bit> |
__cpp_lib_bitset |
202306L | <bitset> |
__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_byteswap |
202110L | <bit> |
__cpp_lib_char8_t |
201907L | <atomic> <filesystem> <istream> <limits> <locale> <ostream> <string> <string_view> |
__cpp_lib_chrono |
202306L | <chrono> |
__cpp_lib_chrono_udls |
201304L | <chrono> |
__cpp_lib_clamp |
201603L | <algorithm> |
__cpp_lib_common_reference |
202302L | <type_traits> |
__cpp_lib_common_reference_wrapper |
202302L | <functional> |
__cpp_lib_complex_udls |
201309L | <complex> |
__cpp_lib_concepts |
202207L | <concepts> <compare> |
__cpp_lib_constexpr_algorithms |
202306L | <algorithm> <utility> |
__cpp_lib_constexpr_bitset |
202207L | <bitset> |
__cpp_lib_constexpr_charconv |
202207L | <charconv> |
__cpp_lib_constexpr_cmath |
202306L | <cmath> <cstdlib> |
__cpp_lib_constexpr_complex |
202306L | <complex> |
__cpp_lib_constexpr_dynamic_alloc |
201907L | <memory> |
__cpp_lib_constexpr_functional |
201907L | <functional> |
__cpp_lib_constexpr_iterator |
201811L | <iterator> |
__cpp_lib_constexpr_memory |
202202L | <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_typeinfo |
202106L | <typeinfo> |
__cpp_lib_constexpr_utility |
201811L | <utility> |
__cpp_lib_constexpr_vector |
201907L | <vector> |
__cpp_lib_containers_ranges |
202202L | <vector> <list> <forward_list> <map> <set> <unordered_map> <unordered_set> <deque> <queue> <stack> <string> |
__cpp_lib_copyable_function |
202306L | <functional> |
__cpp_lib_coroutine |
201902L | <coroutine> |
__cpp_lib_debugging |
202311L | <debugging> |
__cpp_lib_destroying_delete |
201806L | <new> |
__cpp_lib_enable_shared_from_this |
201603L | <memory> |
__cpp_lib_endian |
201907L | <bit> |
__cpp_lib_erase_if |
202002L | <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_expected |
202211L | <expected> |
__cpp_lib_filesystem |
201703L | <filesystem> |
__cpp_lib_flat_map |
202207L | <flat_map> |
__cpp_lib_flat_set |
202207L | <flat_set> |
__cpp_lib_format |
202311L | <format> |
__cpp_lib_format_ranges |
202207L | <format> |
__cpp_lib_format_uchar |
202311L | <format> |
__cpp_lib_formatters |
202302L | <stacktrace> <thread> |
__cpp_lib_forward_like |
202207L | <utility> |
__cpp_lib_freestanding_algorithm |
202311L | <algorithm> |
__cpp_lib_freestanding_array |
202311L | <array> |
__cpp_lib_freestanding_char_traits |
202306L | <string> |
__cpp_lib_freestanding_charconv |
202306L | <charconv> |
__cpp_lib_freestanding_cstdlib |
202306L | <cstdlib> <cmath> |
__cpp_lib_freestanding_cstring |
202311L | <cstring> |
__cpp_lib_freestanding_cwchar |
202306L | <cwchar> |
__cpp_lib_freestanding_errc |
202306L | <cerrno> <system_error> |
__cpp_lib_freestanding_expected |
202311L | <expected> |
__cpp_lib_freestanding_feature_test_macros |
202306L | |
__cpp_lib_freestanding_functional |
202306L | <functional> |
__cpp_lib_freestanding_iterator |
202306L | <iterator> |
__cpp_lib_freestanding_mdspan |
202311L | <mdspan> |
__cpp_lib_freestanding_memory |
202306L | <memory> |
__cpp_lib_freestanding_numeric |
202311L | <numeric> |
__cpp_lib_freestanding_optional |
202311L | <optional> |
__cpp_lib_freestanding_ranges |
202306L | <ranges> |
__cpp_lib_freestanding_ratio |
202306L | <ratio> |
__cpp_lib_freestanding_string_view |
202311L | <string_view> |
__cpp_lib_freestanding_tuple |
202306L | <tuple> |
__cpp_lib_freestanding_utility |
202306L | <utility> |
__cpp_lib_freestanding_variant |
202311L | <variant> |
__cpp_lib_fstream_native_handle |
202306L | <fstream> |
__cpp_lib_function_ref |
202306L | <functional> |
__cpp_lib_gcd_lcm |
201606L | <numeric> |
__cpp_lib_generator |
202207L | <generator> |
__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_hazard_pointer |
202306L | <hazard_pointer> |
__cpp_lib_hypot |
201603L | <cmath> |
__cpp_lib_incomplete_container_elements |
201505L | <forward_list> <list> <vector> |
__cpp_lib_int_pow2 |
202002L | <bit> |
__cpp_lib_integer_comparison_functions |
202002L | <utility> |
__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_invoke_r |
202106L | <functional> |
__cpp_lib_ios_noreplace |
202207L | <ios> |
__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_implicit_lifetime |
202302L | <type_traits> |
__cpp_lib_is_invocable |
201703L | <type_traits> |
__cpp_lib_is_layout_compatible |
201907L | <type_traits> |
__cpp_lib_is_nothrow_convertible |
201806L | <type_traits> |
__cpp_lib_is_null_pointer |
201309L | <type_traits> |
__cpp_lib_is_pointer_interconvertible |
201907L | <type_traits> |
__cpp_lib_is_scoped_enum |
202011L | <type_traits> |
__cpp_lib_is_swappable |
201603L | <type_traits> |
__cpp_lib_is_within_lifetime |
202306L | <type_traits> |
__cpp_lib_jthread |
201911L | <stop_token> <thread> |
__cpp_lib_latch |
201907L | <latch> |
__cpp_lib_launder |
201606L | <new> |
__cpp_lib_linalg |
202311L | <linalg> |
__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_mdspan |
202207L | <mdspan> |
__cpp_lib_memory_resource |
201603L | <memory_resource> |
__cpp_lib_modules |
202207L | |
__cpp_lib_move_iterator_concept |
202207L | <iterator> |
__cpp_lib_move_only_function |
202110L | <functional> |
__cpp_lib_node_extract |
201606L | <map> <set> <unordered_map> <unordered_set> |
__cpp_lib_nonmember_container_access |
201411L | <array> <deque> <forward_list> <iterator> <list> <map> <regex> <set> <string> <unordered_map> <unordered_set> <vector> |
__cpp_lib_not_fn |
202306L | <functional> |
__cpp_lib_null_iterators |
201304L | <iterator> |
__cpp_lib_optional |
202110L | <optional> |
__cpp_lib_out_ptr |
202311L | <memory> |
__cpp_lib_parallel_algorithm |
201603L | <algorithm> <numeric> |
__cpp_lib_polymorphic_allocator |
201902L | <memory_resource> |
__cpp_lib_print |
202207L | <print> <ostream> |
__cpp_lib_quoted_string_io |
201304L | <iomanip> |
__cpp_lib_ranges |
202302L | <algorithm> <functional> <iterator> <memory> <ranges> |
__cpp_lib_ranges_as_const |
202311L | <ranges> |
__cpp_lib_ranges_as_rvalue |
202207L | <ranges> |
__cpp_lib_ranges_cartesian_product |
202207L | <ranges> |
__cpp_lib_ranges_chunk |
202202L | <ranges> |
__cpp_lib_ranges_chunk_by |
202202L | <ranges> |
__cpp_lib_ranges_contains |
202207L | <algorithm> |
__cpp_lib_ranges_enumerate |
202302L | <ranges> <version> |
__cpp_lib_ranges_find_last |
202207L | <algorithm> |
__cpp_lib_ranges_fold |
202207L | <algorithm> |
__cpp_lib_ranges_iota |
202202L | <numeric> |
__cpp_lib_ranges_join_with |
202202L | <ranges> |
__cpp_lib_ranges_repeat |
202207L | <ranges> |
__cpp_lib_ranges_slide |
202202L | <ranges> |
__cpp_lib_ranges_starts_ends_with |
202106L | <algorithm> |
__cpp_lib_ranges_stride |
202207L | <ranges> |
__cpp_lib_ranges_to_container |
202202L | <ranges> |
__cpp_lib_ranges_zip |
202110L | <ranges> <tuple> <utility> |
__cpp_lib_ratio |
202306L | <ratio> |
__cpp_lib_raw_memory_algorithms |
201606L | <memory> |
__cpp_lib_rcu |
202306L | <rcu> |
__cpp_lib_reference_from_temporary |
202202L | <type_traits> |
__cpp_lib_remove_cvref |
201711L | <type_traits> |
__cpp_lib_result_of_sfinae |
201210L | <functional> <type_traits> |
__cpp_lib_robust_nonmodifying_seq_ops |
201304L | <algorithm> |
__cpp_lib_sample |
201603L | <algorithm> |
__cpp_lib_saturation_arithmetic |
202311L | <numeric> |
__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 |
202202L | <algorithm> |
__cpp_lib_smart_ptr_for_overwrite |
202002L | <memory> |
__cpp_lib_smart_ptr_owner_equality |
202306L | <memory> |
__cpp_lib_source_location |
201907L | <source_location> |
__cpp_lib_span |
202311L | <span> |
__cpp_lib_span_initializer_list |
202311L | <span> |
__cpp_lib_spanstream |
202106L | <spanstream> |
__cpp_lib_ssize |
201902L | <iterator> |
__cpp_lib_sstream_from_string_view |
202306L | <sstream> |
__cpp_lib_stacktrace |
202011L | <stacktrace> |
__cpp_lib_start_lifetime_as |
202207L | <memory> |
__cpp_lib_starts_ends_with |
201711L | <string> <string_view> |
__cpp_lib_stdatomic_h |
202011L | <stdatomic.h> |
__cpp_lib_string_contains |
202011L | <string> <string_view> |
__cpp_lib_string_resize_and_overwrite |
202110L | <string> |
__cpp_lib_string_udls |
201304L | <string> |
__cpp_lib_string_view |
201803L | <string> <string_view> |
__cpp_lib_submdspan |
202306L | <mdspan> |
__cpp_lib_syncbuf |
201803L | <syncstream> |
__cpp_lib_text_encoding |
202306L | <text_encoding> |
__cpp_lib_three_way_comparison |
201907L | <compare> |
__cpp_lib_to_address |
201711L | <memory> |
__cpp_lib_to_array |
201907L | <array> |
__cpp_lib_to_chars |
202306L | <charconv> |
__cpp_lib_to_string |
202306L | <string> |
__cpp_lib_to_underlying |
202102L | <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_tuple_like |
202311L | <utility> <tuple> <map> <unordered_map> |
__cpp_lib_tuples_by_type |
201304L | <utility> <tuple> |
__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_unreachable |
202202L | <utility> |
__cpp_lib_unwrap_ref |
201811L | <type_traits> |
__cpp_lib_variant |
202306L | <variant> |
__cpp_lib_void_t |
202306L | <version> |
Total number of macros: 226 |
Notes
Each value in "Value" column follows the pattern: "yyyymmL"
, where "yyyy"
is a year, and "mm"
is a month when the corresponding feature-set was accepted for standardization. Some values where increased since the time of their introduction, if capabilities of given feature where extended. The table above contains only the most recent values (that is, taken from the latest C++ language draft standard). A full set of values, including the initial and intermediate ones, can be found in this table.
See also
Feature testing (C++20) | A set of preprocessor macros to test the corresponding to C++ language and library features |
C++ documentation for Predefined Macro Symbols |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/feature_test