Difference between revisions of "cpp/utility/feature test"
From cppreference.com
m (rm <version> off __cpp_lib_ranges_enumerate (<version> is always a default for all FTM) - it came from draft and also should be removed (editorial fix) from ISO/draft: http://eel.is/c++draft/version.syn) |
m (→See also: +Predefined Macro Symbols here too) |
||
Line 760: | Line 760: | ||
{{dsc begin}} | {{dsc begin}} | ||
{{dsc|[[cpp/feature_test|'''Feature testing''']] {{mark c++20}}|A set of preprocessor macros to test the corresponding to C++ language and library features}} | {{dsc|[[cpp/feature_test|'''Feature testing''']] {{mark c++20}}|A set of preprocessor macros to test the corresponding to C++ language and library features}} | ||
+ | {{dsc see cpp|cpp/preprocessor/replace#Predefined macros|Predefined Macro Symbols|nomono=true}} | ||
{{dsc end}} | {{dsc end}} | ||
{{langlinks|es|ja|ru|zh}} | {{langlinks|es|ja|ru|zh}} |
Revision as of 07:35, 31 August 2023
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_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_adaptor_iterator_pair_constructor
|
202106L | <stack> <queue> |
__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_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
|
202202L | <functional> |
__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_byteswap
|
202110L | <bit> |
__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_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
|
201806L | <algorithm> <utility> |
__cpp_lib_constexpr_bitset
|
202207L | <bitset> |
__cpp_lib_constexpr_charconv
|
202207L | <charconv> |
__cpp_lib_constexpr_cmath
|
202202L | <cmath> <cstdlib> |
__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
|
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_coroutine
|
201902L | <coroutine> |
__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
|
202207L | <format> |
__cpp_lib_format_ranges
|
202207L | <format> |
__cpp_lib_formatters
|
202302L | <stacktrace> <thread> |
__cpp_lib_forward_like
|
202207L | <utility> |
__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_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_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_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
|
201603L | <functional> |
__cpp_lib_null_iterators
|
201304L | <iterator> |
__cpp_lib_optional
|
202110L | <optional> |
__cpp_lib_out_ptr
|
202106L | <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
|
202207L | <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> |
__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_raw_memory_algorithms
|
201606L | <memory> |
__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_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_source_location
|
201907L | <source_location> |
__cpp_lib_span
|
202002L | <span> |
__cpp_lib_spanstream
|
202106L | <spanstream> |
__cpp_lib_ssize
|
201902L | <iterator> |
__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_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_to_underlying
|
202102L | <utility> |
__cpp_lib_transformation_trait_aliases
|
201304L | <type_traits> |
__cpp_lib_transparent_operators
|
201510L | <memory> <functional> |
__cpp_lib_tuple_like
|
202207L | <utility> <tuple> <map> <unordered_map> |
__cpp_lib_tuple_element_t
|
201402L | <tuple> |
__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
|
202106L | <variant> |
__cpp_lib_void_t
|
201411L | <type_traits> |
Total number of macros: 185 |
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
|