Template:cpp/utility/lib feature macros
From cppreference.com
| Macro name | Feature | Value | Std | Paper(s) |
|---|---|---|---|---|
__cpp_lib_adaptor_
|
Iterator pair constructors for std::stack and std::queue | 202106L
|
(C++23) | P1425R4 |
__cpp_lib_addressof_
|
Constexpr std::addressof | 201603L
|
(C++17) | LWG2296 |
__cpp_lib_algorithm_
|
Enabling list-initialization for algorithms | 202403L
|
(C++26) | P2248R8 P3217R0 |
__cpp_lib_algorithm_
|
Ranges iterators as inputs to non-Ranges algorithms | 202207L
|
(C++23) | P2408R5 |
__cpp_lib_aligned_
|
std::aligned_accessor: an std::mdspan accessor expressing pointer over-alignment | 202411L
|
(C++26) | P2897R7 |
__cpp_lib_allocate_
|
Size-feedback in the allocator interface, e.g.: std::allocator::allocate_at_least, std::allocator_traits::allocate_at_least | 202302L
|
(C++23) | P0401R6 P2652R2 LWG3887 |
__cpp_lib_allocator_
|
std::allocator_traits::is_always_equal, noexcept cleanups
|
201411L
|
(C++17) | N4258 |
__cpp_lib_any
|
std::any | 201606L
|
(C++17) | P0220R1 P0032R3 |
__cpp_lib_apply
|
std::apply | 201603L
|
(C++17) | P0220R1 |
__cpp_lib_array_
|
Constexpr for std::reverse_iterator, std::move_iterator, std::array and range access | 201603L
|
(C++17) | P0031R0 |
| ConstexprIterator; constexpr comparison for std::array; misc constexpr bits (std::array::fill et al.) | 201811L
|
(C++20) | P0858R0 LWG3257 P1023R0 P1032R1 | |
__cpp_lib_as_const
|
std::as_const | 201510L
|
(C++17) | P0007R1 |
__cpp_lib_associative_
|
Heterogeneous erasure in associative containers and unordered associative containers | 202110L
|
(C++23) | P2077R3 |
__cpp_lib_associative_
|
Heterogeneous overloads for the remaining member functions in ordered and unordered associative containers | 202306L
|
(C++26) | P2363R5 |
__cpp_lib_assume_
|
std::assume_aligned | 201811L
|
(C++20) | P1007R3 |
__cpp_lib_atomic_
|
std::atomic_flag::test | 201907L
|
(C++20) | P1135R6 |
__cpp_lib_atomic_
|
Floating-point atomic | 201711L
|
(C++20) | P0020R6 |
__cpp_lib_atomic_
|
Constexpr std::atomic<T>::is_always_lock_free | 201603L
|
(C++17) | P0152R1 |
__cpp_lib_atomic_
|
Atomic lockfree integral types (std::atomic_signed_lock_free, std::atomic_unsigned_lock_free) | 201907L
|
(C++20) | P1135R6 |
__cpp_lib_atomic_
|
Atomic minimum/maximum (std::atomic::fetch_min, std::atomic::fetch_max, etc) | 202403L
|
(C++26) | P0493R5 |
__cpp_lib_atomic_
|
std::atomic_ref | 201806L
|
(C++20) | P0019R8 |
| std::atomic_ref::address() | 202411L
|
(C++26) | P2835R7 | |
__cpp_lib_atomic_
|
std::atomic<std::shared_ptr> | 201711L
|
(C++20) | P0718R2 |
__cpp_lib_atomic_
|
Fixing atomic initialization (value-initialize std::atomic by default) | 201911L
|
(C++20) | P0883R2 |
__cpp_lib_atomic_
|
Efficient std::atomic waiting | 201907L
|
(C++20) | P1135R6 |
__cpp_lib_barrier
|
std::barrier | 201907L
|
(C++20) | P1135R6 |
| std::barrier's phase completion guarantees | 202302L
|
(C++23) | P2588R3 | |
__cpp_lib_bind_back
|
std::bind_back | 202202L
|
(C++23) | P2387R3 |
| Allow passing callable objects as non-type template arguments to std::bind_back | 202306L
|
(C++26) | P2714R1 | |
__cpp_lib_bind_front
|
std::bind_front | 201907L
|
(C++20) | P0356R5 P1651R0 |
| Allow passing callable objects as non-type template arguments to std::bind_front | 202306L
|
(C++26) | P2714R1 | |
__cpp_lib_bit_cast
|
std::bit_cast | 201806L
|
(C++20) | P0476R2 |
__cpp_lib_bitops
|
Bit operations | 201907L
|
(C++20) | P0553R4 |
__cpp_lib_bitset
|
Interfacing std::bitset with std::string_view | 202306L
|
(C++26) | P2697R1 |
__cpp_lib_bool_constant
|
std::bool_constant | 201505L
|
(C++17) | N4389 |
__cpp_lib_bounded_
|
std::is_bounded_array, std::is_unbounded_array | 201902L
|
(C++20) | P1357R1 |
__cpp_lib_boyer_
|
Searchers | 201603L
|
(C++17) | P0220R1 |
__cpp_lib_byte
|
std::byte | 201603L
|
(C++17) | P0298R3 |
__cpp_lib_byteswap
|
std::byteswap | 202110L
|
(C++23) | P1272R4 |
__cpp_lib_char8_
|
Library support for char8_t
|
201907L
|
(C++20) | P0482R6 P1423R3 |
__cpp_lib_chrono
|
Rounding functions for std::chrono::duration and std::chrono::time_point | 201510L
|
(C++17) | P0092R1 |
| Constexpr for all the member functions of std::chrono::duration and std::chrono::time_point | 201611L
|
P0505R0 | ||
| Calendars and Time zones | 201907L
|
(C++20) | P0355R7 P1466R3 | |
| Hashing support for std::chrono value classes | 202306L
|
(C++26) | P2592R3 | |
__cpp_lib_chrono_
|
User-defined literals for time types | 201304L
|
(C++14) | N3642 |
__cpp_lib_clamp
|
std::clamp | 201603L
|
(C++17) | P0025R1 |
__cpp_lib_common_
|
Make std::common_reference_t of std::reference_wrapper a reference type | 202302L
|
(C++23) | P2655R3 |
__cpp_lib_common_
|
Make std::common_reference_t of std::reference_wrapper a reference type | 202302L
|
(C++23) | P2655R3 |
__cpp_lib_complex_
|
User-defined Literals for std::complex
|
201309L
|
(C++14) | N3779 |
__cpp_lib_concepts
|
Standard library concepts | 202002L
|
(C++20) | P0898R3 P1754R1 P1964R2 |
| Move-only types for equality_comparable_with, totally_ordered_with, and three_way_comparable_with | 202207L
|
(C++23) | P2404R3 | |
__cpp_lib_constexpr_
|
Constexpr for algorithms | 201806L
|
(C++20) | P0202R3 P0879R0 LWG3256 LWG3792 |
| Constexpr stable sorting | 202306L
|
(C++26) | P2562R1 | |
__cpp_lib_constexpr_
|
Constexpr std::atomic and std::atomic_ref | 202411L
|
(C++26) | P3309R3 |
__cpp_lib_constexpr_
|
A more constexpr std::bitset | 202207L
|
(C++23) | P2417R2 |
__cpp_lib_constexpr_
|
Constexpr for std::to_chars and std::from_chars for integral types | 202207L
|
(C++23) | P2291R3 |
__cpp_lib_constexpr_
|
Constexpr for mathematical functions in <cmath> and <cstdlib> | 202202L
|
(C++23) | P0533R9 |
| More constexpr for <cmath> | 202306L
|
(C++26) | P1383R2 | |
__cpp_lib_constexpr_
|
Constexpr for std::complex | 201711L
|
(C++20) | P0415R1 |
| More constexpr for <complex> | 202306L
|
(C++26) | P1383R2 | |
__cpp_lib_constexpr_
|
Constexpr std::deque | 202502L
|
(C++26) | P3372R3 |
__cpp_lib_constexpr_
|
Constexpr for std::allocator and related utilities | 201907L
|
(C++20) | P0784R7 |
__cpp_lib_constexpr_
|
Constexpr for exception types, e.g. std::bad_alloc, std::bad_cast etc. | 202411L
|
(C++26) | P3068R6 |
| Constexpr for more exception types | 202502L
|
P3378R2 | ||
__cpp_lib_constexpr_
|
Constexpr std::flat_map and std::flat_multimap | 202502L
|
(C++26) | P3372R3 |
__cpp_lib_constexpr_
|
Constexpr std::flat_set and std::flat_multiset | 202502L
|
(C++26) | P3372R3 |
__cpp_lib_constexpr_
|
Constexpr std::forward_list | 202502L
|
(C++26) | P3372R3 |
__cpp_lib_constexpr_
|
Misc constexpr bits (std::default_searcher); constexpr INVOKE
|
201907L
|
(C++20) | P1032R1 P1065R2 |
__cpp_lib_constexpr_
|
Constexpr std::inplace_vector for non-trivial types | 202502L
|
(C++26) | P3074R7 |
__cpp_lib_constexpr_
|
Misc constexpr bits (std::insert_iterator et al.) | 201811L
|
(C++20) | P1032R1 |
__cpp_lib_constexpr_
|
Constexpr std::list | 202502L
|
(C++26) | P3372R3 |
__cpp_lib_constexpr_
|
Constexpr std::map and std::multimap | 202502L
|
(C++26) | P3372R3 |
__cpp_lib_constexpr_
|
Constexpr in std::pointer_traits | 201811L
|
(C++20) | P1006R1 |
| Constexpr std::unique_ptr | 202202L
|
(C++23) | P2273R3 | |
__cpp_lib_constexpr_
|
Constexpr placement new
|
202406L
|
(C++26) | P2747R2 |
__cpp_lib_constexpr_
|
Constexpr for algorithms in <numeric> | 201911L
|
(C++20) | P1645R1 |
__cpp_lib_constexpr_
|
Constexpr std::queue and std::priority_queue | 202502L
|
(C++26) | P3372R3 |
__cpp_lib_constexpr_
|
Constexpr std::set and std::multiset | 202502L
|
(C++26) | P3372R3 |
__cpp_lib_constexpr_
|
Constexpr std::stack | 202502L
|
(C++26) | P3372R3 |
__cpp_lib_constexpr_
|
More constexpr std::char_traits | 201611L
|
(C++17) | P0426R1 |
| Fully constexpr std::char_traits | 201811L
|
(C++20) | P1032R1 | |
| Constexpr std::string | 201907L
|
P0980R1 | ||
__cpp_lib_constexpr_
|
Misc constexpr bits (std::string_view::copy) | 201811L
|
(C++20) | P1032R1 |
__cpp_lib_constexpr_
|
Misc constexpr bits (std::tuple::operator= et al.) | 201811L
|
(C++20) | P1032R1 |
__cpp_lib_constexpr_
|
Constexpr for std::type_info::operator== | 202106L
|
(C++23) | P1328R1 |
__cpp_lib_constexpr_
|
Constexpr std::unordered_map and std::unordered_multimap | 202502L
|
(C++26) | P3372R3 |
__cpp_lib_constexpr_
|
Constexpr std::unordered_set and std::unordered_multiset | 202502L
|
(C++26) | P3372R3 |
__cpp_lib_constexpr_
|
Misc constexpr bits (std::pair::operator= et al.) | 201811L
|
(C++20) | P1032R1 |
__cpp_lib_constexpr_
|
Constexpr for std::vector | 201907L
|
(C++20) | P1004R2 |
__cpp_lib_constrained_
|
Constrained relational operators for std::pair, std::tuple, std::optional, and std::variant | 202403L
|
(C++26) | P2944R3 |
| Constraining std::expected equality operators | 202411L
|
P3379R0 | ||
__cpp_lib_containers_
|
Ranges-aware construction and insertion for containers and strings | 202202L
|
(C++23) | P1206R7 |
__cpp_lib_contracts
|
<contracts>: Contracts support | 202502L
|
(C++26) | P2900R14 |
__cpp_lib_copyable_
|
std::copyable_function | 202306L
|
(C++26) | P2548R6 |
__cpp_lib_coroutine
|
Coroutines (library support) | 201902L
|
(C++20) | P0912R5 LWG3393 |
__cpp_lib_debugging
|
<debugging>: Debugging support | 202311L
|
(C++26) | P2546R5 |
| Replaceable std::is_debugger_present | 202403L
|
P2810R4 | ||
__cpp_lib_destroying_
|
Destroying operator delete (library support) | 201806L
|
(C++20) | P0722R3 |
__cpp_lib_enable_
|
std::enable_shared_from_this::weak_from_this | 201603L
|
(C++17) | P0033R1 |
__cpp_lib_endian
|
std::endian | 201907L
|
(C++20) | P0463R1 P1612R1 |
__cpp_lib_erase_
|
Uniform container erasure | 202002L
|
(C++20) | P1209R0 P1115R3 |
__cpp_lib_exchange_
|
std::exchange | 201304L
|
(C++14) | N3668 |
__cpp_lib_execution
|
Execution policies | 201603L
|
(C++17) | P0024R2 |
| std::execution::unsequenced_policy | 201902L
|
(C++20) | P1001R2 | |
__cpp_lib_expected
|
class template std::expected | 202202L
|
(C++23) | P0323R12 |
| Monadic functions for std::expected | 202211L
|
P2505R5 | ||
__cpp_lib_filesystem
|
Filesystem library | 201703L
|
(C++17) | P0218R1 P0219R1 P0392R0 P0317R1 |
__cpp_lib_flat_map
|
std::flat_map and std::flat_multimap | 202207L
|
(C++23) | P0429R9 |
__cpp_lib_flat_set
|
std::flat_set and std::flat_multiset | 202207L
|
(C++23) | P1222R4 LWG3751 |
__cpp_lib_format
|
Text formatting | 201907L
|
(C++20) | P0645R10 P1361R2 P1652R1 |
| Compile-time format string checks; Reducing parameterization of std::vformat_to | 202106L
|
(C++23) (DR20) |
P2216R3 | |
| Fixing locale handling in chrono formatters; Supporting non-const-formattable types | 202110L
|
P2372R3 P2418R2 | ||
| Exposing std::basic_format_string; clarify handling of encodings in localized formatting of chrono types | 202207L
|
(C++23) | P2419R2 P2508R1 | |
| Formatting pointers | 202304L
|
(C++26) | P2510R3 | |
| Type-checking format args | 202305L
|
P2757R3 | ||
| Member visit | 202306L
|
P2637R3 | ||
| Runtime format strings | 202311L
|
P2918R2 | ||
Renaming std::runtime_format to std::dynamic_format
|
202603L
|
P2918R2 | ||
__cpp_lib_format_
|
Formatting of std::filesystem::path | 202403L
|
(C++26) | P2845R8 |
__cpp_lib_format_
|
Formatting ranges | 202207L
|
(C++23) | P2286R8 P2585R1 LWG3750 |
__cpp_lib_format_
|
Fix formatting of code units as integers | 202311L
|
(C++26) | P2909R4 |
__cpp_lib_formatters
|
Formatting std::thread::id and std::stacktrace | 202302L
|
(C++23) | P2693R1 |
__cpp_lib_forward_
|
std::forward_like | 202207L
|
(C++23) | P2445R1 |
__cpp_lib_freestanding_
|
Freestanding facilities in <algorithm> | 202311L
|
(C++26) | P2407R5 |
__cpp_lib_freestanding_
|
Make parts of std::array freestanding | 202311L
|
(C++26) | P2407R5 |
__cpp_lib_freestanding_
|
Freestanding std::char_traits | 202306L
|
(C++26) | P2338R4 |
__cpp_lib_freestanding_
|
Freestanding facilities in <charconv> | 202306L
|
(C++26) | P2338R4 |
__cpp_lib_freestanding_
|
Freestanding facilities in <cstdlib> | 202306L
|
(C++26) | P2338R4 |
__cpp_lib_freestanding_
|
Freestanding facilities in <cstring> | 202306L
|
(C++26) | P2338R4 |
| Removing std::strtok from freestanding facilities | 202311L
|
P2937R0 | ||
__cpp_lib_freestanding_
|
Freestanding facilities in <cwchar> | 202306L
|
(C++26) | P2338R4 |
__cpp_lib_freestanding_
|
Freestanding std::errc | 202306L
|
(C++26) | P2338R4 |
__cpp_lib_freestanding_
|
Make parts of std::expected freestanding | 202311L
|
(C++26) | P2833R2 |
__cpp_lib_freestanding_
|
Support for freestanding feature-test macros | 202306L
|
(C++26) | P2198R7 |
__cpp_lib_freestanding_
|
Freestanding facilities in <functional> | 202306L
|
(C++26) | P2198R7 |
__cpp_lib_freestanding_
|
Freestanding facilities in <iterator> | 202306L
|
(C++26) | P2198R7 |
__cpp_lib_freestanding_
|
Freestanding std::mdspan | 202311L
|
(C++26) | P2833R2 |
__cpp_lib_freestanding_
|
Freestanding facilities in <memory> | 202306L
|
(C++26) | P2198R7 |
__cpp_lib_freestanding_
|
Freestanding facilities in <numeric> (saturation arithmetic) | 202311L
|
(C++26) | P0543R3 |
__cpp_lib_freestanding_
|
Definition of operator new (optional in freestanding implementations) | 202306L
|
(C++26) | P2198R7 |
__cpp_lib_freestanding_
|
Making parts of std::optional freestanding | 202311L
|
(C++26) | P2407R5 |
__cpp_lib_freestanding_
|
Freestanding facilities in <ranges> | 202306L
|
(C++26) | P2198R7 |
__cpp_lib_freestanding_
|
Freestanding facilities in <ratio> | 202306L
|
(C++26) | P2198R7 |
__cpp_lib_freestanding_
|
Making parts of std::string_view freestanding | 202311L
|
(C++26) | P2407R5 |
__cpp_lib_freestanding_
|
Freestanding facilities in <tuple> | 202306L
|
(C++26) | P2198R7 |
__cpp_lib_freestanding_
|
Freestanding facilities in <utility> | 202306L
|
(C++26) | P2198R7 |
__cpp_lib_freestanding_
|
Making parts of std::variant freestanding | 202311L
|
(C++26) | P2407R5 |
__cpp_lib_fstream_
|
Obtaining native handles from file streams | 202306L
|
(C++26) | P1759R6 |
__cpp_lib_function_
|
std::function_ref: A type-erased callable reference | 202306L
|
(C++26) | P0792R14 |
__cpp_lib_gcd_lcm
|
std::gcd, std::lcm | 201606L
|
(C++17) | P0295R0 |
__cpp_lib_generator
|
std::generator: Synchronous coroutine generator for ranges | 202207L
|
(C++23) | P2502R2 |
__cpp_lib_generic_
|
Heterogeneous comparison lookup in associative containers | 201304L
|
(C++14) | N3657 |
__cpp_lib_generic_
|
Heterogeneous comparison lookup in unordered associative containers | 201811L
|
(C++20) | P0919R3 |
__cpp_lib_hardware_
|
std::hardware_{constructive, destructive}_interference_size | 201703L
|
(C++17) | P0154R1 |
__cpp_lib_has_unique_
|
std::has_unique_object_representations | 201606L
|
(C++17) | P0258R2 |
__cpp_lib_hazard_
|
<hazard_pointer>: Hazard pointers | 202306L
|
(C++26) | P2530R3 |
__cpp_lib_hive
|
<hive>: a bucket-based container that re-uses memory locations from erased elements | 202502L
|
(C++26) | P0447R28 |
__cpp_lib_hypot
|
3-argument overload of std::hypot | 201603L
|
(C++17) | P0030R1 |
__cpp_lib_incomplete_
|
Minimal incomplete type support for std::forward_list, std::list, and std::vector | 201505L
|
(C++17) | N4510 |
__cpp_lib_indirect
|
std::indirect | 202502L
|
(C++26) | P3019R14 |
__cpp_lib_inplace_
|
std::inplace_vector: Dynamically-resizable vector with fixed capacity (inplace storage) | 202406L
|
(C++26) | P0843R14 |
__cpp_lib_int_pow2
|
Integral power-of-2 operations (std::has_single_bit, std::bit_ceil, std::bit_floor, std::bit_width) | 202002L
|
(C++20) | P0556R3 P1956R1 |
__cpp_lib_integer_
|
Integer comparison functions | 202002L
|
(C++20) | P0586R2 |
__cpp_lib_integer_
|
Compile-time integer sequences | 201304L
|
(C++14) | N3658 |
__cpp_lib_integral_
|
std::integral_constant | 201304L
|
(C++14) | N3545 |
__cpp_lib_interpolate
|
std::lerp, std::midpoint | 201902L
|
(C++20) | P0811R3 |
__cpp_lib_invoke
|
std::invoke | 201411L
|
(C++17) | N4169 |
__cpp_lib_invoke_
|
std::invoke_r | 202106L
|
(C++23) | P2136R3 |
__cpp_lib_ios_noreplace
|
Support exclusive mode for fstreams | 202207L
|
(C++23) | P2467R1 |
__cpp_lib_is_aggregate
|
std::is_aggregate | 201703L
|
(C++17) | LWG2911 |
__cpp_lib_is_constant_
|
std::is_constant_evaluated | 201811L
|
(C++20) | P0595R2 |
__cpp_lib_is_final
|
std::is_final | 201402L
|
(C++14) | LWG2112 |
__cpp_lib_is_implicit_
|
std::is_implicit_lifetime | 202302L
|
(C++23) | P2674R1 |
__cpp_lib_is_invocable
|
std::is_invocable, std::invoke_result | 201703L
|
(C++17) | P0604R0 |
__cpp_lib_is_layout_
|
std::is_layout_compatible | 201907L
|
(C++20) | P0466R5 |
__cpp_lib_is_nothrow_
|
std::is_nothrow_convertible | 201806L
|
(C++20) | P0758R1 LWG3356 |
__cpp_lib_is_null_
|
std::is_null_pointer | 201309L
|
(C++14) (DR11) |
LWG2247 |
__cpp_lib_is_pointer_
|
Pointer-interconvertibility traits: std::is_pointer_interconvertible_with_class, std::is_pointer_interconvertible_base_of | 201907L
|
(C++20) | P0466R5 |
__cpp_lib_is_scoped_
|
std::is_scoped_enum | 202011L
|
(C++23) | P1048R1 |
__cpp_lib_is_sufficiently_
|
std::is_sufficiently_aligned: checks a pointer’s alignment precondition | 202411L
|
(C++26) | P2897R7 |
__cpp_lib_is_swappable
|
(nothrow-)swappable traits | 201603L
|
(C++17) | P0185R1 |
__cpp_lib_is_virtual_
|
std::is_virtual_base_of: Type trait for detecting virtual base classes | 202406L
|
(C++26) | P2985R0 |
__cpp_lib_is_within_
|
Checking if a union alternative is active (std::is_within_lifetime) | 202306L
|
(C++26) | P2641R4 |
__cpp_lib_jthread
|
Stop token and joining thread | 201911L
|
(C++20) | P0660R10 P1869R1 |
__cpp_lib_latch
|
std::latch | 201907L
|
(C++20) | P1135R6 |
__cpp_lib_launder
|
CWG issue 1776: Replacement of class objects containing reference members (std::launder) | 201606L
|
(C++17) | P0137R1 |
__cpp_lib_linalg
|
A free function linear algebra interface based on the BLAS | 202311L
|
(C++26) | P1673R13 |
__cpp_lib_list_remove_
|
Change the return type of the remove(), remove_if() and unique() of std::forward_list and std::list
|
201806L
|
(C++20) | P0646R1 |
__cpp_lib_logical_
|
Logical operations on type traits | 201510L
|
(C++17) | P0013R1 |
__cpp_lib_make_from_
|
std::make_from_tuple | 201606L
|
(C++17) | P0209R2 |
__cpp_lib_make_reverse_
|
std::make_reverse_iterator | 201402L
|
(C++14) | LWG2285 |
__cpp_lib_make_unique
|
std::make_unique | 201304L
|
(C++14) | N3656 |
__cpp_lib_map_try_
|
std::map::try_emplace, std::map::insert_or_assign | 201411L
|
(C++17) | N4279 |
__cpp_lib_math_constants
|
Mathematical constants | 201907L
|
(C++20) | P0631R8 |
__cpp_lib_math_special_
|
Mathematical special functions | 201603L
|
(C++17) | P0226R1 |
__cpp_lib_mdspan
|
std::mdspan | 202207L
|
(C++23) | P0009R18 P2599R2 P2604R0 P2613R1 |
| std::dims for std::mdspan | 202406L
|
(C++26) | P2389R2 | |
__cpp_lib_memory_
|
std::pmr::memory_resource | 201603L
|
(C++17) | P0220R1 |
__cpp_lib_modules
|
Standard library modules std and std.compat
|
202207L
|
(C++23) | P2465R3 |
__cpp_lib_move_iterator_
|
Make std::move_iterator a random access iterator | 202207L
|
(C++23) | P2520R0 |
__cpp_lib_move_only_
|
std::move_only_function | 202110L
|
(C++23) | P0288R9 |
__cpp_lib_node_extract
|
Splicing maps and sets (std::map::extract, std::map::merge, insert(node_type), etc) | 201606L
|
(C++17) | P0083R3 |
__cpp_lib_nonmember_
|
std::size, std::data and std::empty | 201411L
|
(C++17) | N4280 |
__cpp_lib_not_fn
|
std::not_fn | 201603L
|
(C++17) | P0005R4 |
| Allow passing callable objects as non-type template arguments to std::not_fn | 202306L
|
(C++26) | P2714R1 | |
__cpp_lib_null_iterators
|
Null LegacyForwardIterators | 201304L
|
(C++14) | N3644 |
__cpp_lib_optional
|
std::optional | 201606L
|
(C++17) | P0220R1 P0032R3 P0307R2 |
| Fully constexpr std::optional | 202106L
|
(C++23) (DR20) |
P2231R1 | |
| Monadic operations in std::optional | 202110L
|
(C++23) | P0798R8 LWG3621 | |
__cpp_lib_optional_
|
std::optional range support | 202406L
|
(C++26) | P3168R2 |
__cpp_lib_out_ptr
|
std::out_ptr, std::inout_ptr | 202106L
|
(C++23) | P1132R8 |
| Freestanding std::out_ptr, std::inout_ptr | 202311L
|
(C++26) | P2833R2 | |
__cpp_lib_parallel_
|
Parallel algorithms | 201603L
|
(C++17) | P0024R2 |
__cpp_lib_philox_
|
std::philox_engine: Counter-based random number engine | 202406L
|
(C++26) | P2075R6 |
__cpp_lib_polymorphic
|
std::polymorphic | 202502L
|
(C++26) | P3019R14 |
__cpp_lib_polymorphic_
|
std::pmr::polymorphic_allocator as a vocabulary type | 201902L
|
(C++20) | P0339R6 LWG3437 |
__cpp_lib_print
|
Formatted output | 202207L
|
(C++23) | P2093R14 |
| Permit an efficient implementation of std::print | 202403L
|
(C++26) (DR23) |
P3107R5 | |
| std::print more types faster with less memory | 202406L
|
P3235R3 | ||
__cpp_lib_quoted_
|
std::quoted | 201304L
|
(C++14) | N3654 |
__cpp_lib_ranges
|
Ranges library and constrained algorithms | 201911L
|
(C++20) | P0896R4 P1035R7 P1716R3 |
| Non-default-initializable views | 202106L
|
(C++23) (DR20) |
P2325R3 | |
| Views with ownership | 202110L
|
P2415R2 | ||
| std::ranges::range_adaptor_closure | 202202L
|
(C++23) | P2387R3 | |
| Relaxing range adaptors to allow for move-only types | 202207L
|
P2494R2 | ||
| Removing “poison pill” overloads in ranges::begin, ranges::end, ranges::rbegin, ranges::rend, and ranges::size | 202211L
|
P2602R2 | ||
| Relaxing ranges to allow certain projections | 202302L
|
P2609R3 | ||
| Removing the common reference requirement from the indirectly invocable concepts | 202406L
|
(C++26) (DR20) |
P2997R1 | |
__cpp_lib_ranges_
|
std::const_iterator, std::ranges::as_const_view | 202207L
|
(C++23) | P2278R4 |
| Making std::basic_const_iterator follow its underlying type's convertibility | 202311L
|
(C++26) | P2836R1 | |
__cpp_lib_ranges_
|
std::ranges::as_input_view | 202502L
|
(C++26) | P3137R3 P3828R1 |
__cpp_lib_ranges_
|
std::ranges::as_rvalue_view | 202207L
|
(C++23) | P2446R2 |
__cpp_lib_ranges_
|
std::ranges::cache_latest_view | 202411L
|
(C++26) | P3138R5 |
__cpp_lib_ranges_
|
std::ranges::cartesian_product_view | 202207L
|
(C++23) | P2374R4 P2540R1 |
__cpp_lib_ranges_
|
std::ranges::chunk_view | 202202L
|
(C++23) | P2442R1 |
__cpp_lib_ranges_
|
std::ranges::chunk_by_view | 202202L
|
(C++23) | P2443R1 |
__cpp_lib_ranges_
|
std::ranges::concat_view | 202403L
|
(C++26) | P2542R8 |
__cpp_lib_ranges_
|
std::ranges::contains | 202207L
|
(C++23) | P2302R4 |
__cpp_lib_ranges_
|
std::ranges::enumerate_view | 202302L
|
(C++23) | P2164R9 |
__cpp_lib_ranges_
|
std::ranges::find_last, std::ranges::find_last_if, and std::ranges::find_last_if_not | 202207L
|
(C++23) | P1223R5 LWG3807 |
__cpp_lib_ranges_
|
std::ranges fold algorithms
|
202207L
|
(C++23) | P2322R6 |
__cpp_lib_ranges_
|
Vector API for random number generation (std::ranges::generate_random) | 202403L
|
(C++26) | P1068R11 |
__cpp_lib_ranges_
|
std::ranges::iota | 202202L
|
(C++23) | P2440R1 |
__cpp_lib_ranges_
|
std::ranges::join_with_view | 202202L
|
(C++23) | P2441R2 |
__cpp_lib_ranges_
|
std::ranges::repeat_view | 202207L
|
(C++23) | P2474R2 |
__cpp_lib_ranges_
|
std::ranges::approximately_sized_range and std::ranges::reserve_hint | 202502L
|
(C++26) | P2846R6 |
__cpp_lib_ranges_
|
std::ranges::slide_view | 202202L
|
(C++23) | P2442R1 |
__cpp_lib_ranges_
|
std::ranges::starts_with, std::ranges::ends_with | 202106L
|
(C++23) | P1659R3 |
__cpp_lib_ranges_
|
std::ranges::stride_view | 202207L
|
(C++23) | P1899R3 |
__cpp_lib_ranges_
|
std::ranges::to | 202202L
|
(C++23) | P1206R7 |
__cpp_lib_ranges_
|
std::ranges::zip_view, std::ranges::zip_transform_view, std::ranges::adjacent_view, std::ranges::adjacent_transform_view | 202110L
|
(C++23) | P2321R2 |
__cpp_lib_ratio
|
Adding the new 2022 SI prefixes | 202306L
|
(C++26) | P2734R0 |
__cpp_lib_raw_memory_
|
Extending memory management tools | 201606L
|
(C++17) | P0040R3 |
| Constexpr for specialized memory algorithms | 202411L
|
(C++26) | P3369R0 P3508R0 | |
__cpp_lib_rcu
|
<rcu>: Read-Copy Update (RCU) | 202306L
|
(C++26) | P2545R4 |
__cpp_lib_reference_
|
std::reference_constructs_from_temporary and std::reference_converts_from_temporary | 202202L
|
(C++23) | P2255R2 |
__cpp_lib_reference_
|
Comparisons for std::reference_wrapper | 202403L
|
(C++26) | P2944R3 |
__cpp_lib_remove_
|
std::remove_cvref | 201711L
|
(C++20) | P0550R2 |
__cpp_lib_result_
|
std::result_of and SFINAE | 201210L
|
(C++14) | N3462 |
__cpp_lib_robust_
|
Making non-modifying sequence operations more robust (two-range overloads for std::mismatch, std::equal and std::is_permutation) | 201304L
|
(C++14) | N3671 |
__cpp_lib_sample
|
std::sample | 201603L
|
(C++17) | P0220R1 |
__cpp_lib_saturation_
|
Saturation arithmetic | 202311L
|
(C++26) | P0543R3 |
| Renaming saturation arithmetic functions | 202603L
|
(C++26) | P4052R0 | |
__cpp_lib_scoped_
|
std::scoped_lock | 201703L
|
(C++17) | P0156R2 |
__cpp_lib_semaphore
|
std::counting_semaphore, std::binary_semaphore
|
201907L
|
(C++20) | P1135R6 |
__cpp_lib_senders
|
std::execution: Sender-receiver model of execution control | 202406L
|
(C++26) | P2300R10 |
__cpp_lib_shared_
|
std::shared_mutex (untimed) | 201505L
|
(C++17) | N4508 |
__cpp_lib_shared_
|
std::shared_ptr | 201611L
|
(C++17) | P0497R0 |
| Array support of std::make_shared | 201707L
|
(C++20) | P0674R1 | |
__cpp_lib_shared_
|
shared_ptr::weak_type | 201606L
|
(C++17) | P0163R0 |
__cpp_lib_shared_
|
std::shared_timed_mutex | 201402L
|
(C++14) | N3891 |
__cpp_lib_shift
|
std::shift_left and std::shift_right | 201806L
|
(C++20) | P0769R2 |
| std::ranges::shift_left and std::ranges::shift_right | 202202L
|
(C++23) | P2440R1 | |
__cpp_lib_simd
|
<simd>: Data-parallel types | 202411L
|
(C++26) | P1928R15 |
__cpp_lib_smart_
|
Smart pointer creation with default initialization (std::allocate_shared_for_overwrite, std::make_shared_for_overwrite, std::make_unique_for_overwrite) | 202002L
|
(C++20) | P1020R1 P1973R1 |
__cpp_lib_smart_
|
Enabling the use of std::weak_ptr as keys in unordered associative containers | 202306L
|
(C++26) | P1901R2 |
__cpp_lib_source_
|
Source-code information capture (std::source_location) | 201907L
|
(C++20) | P1208R6 |
__cpp_lib_span
|
std::span | 202002L
|
(C++20) | P0122R7 LWG3274 P1024R3 P1976R2 |
| Making parts of std::span freestanding | 202311L
|
(C++26) | P2821R5 P2833R2 | |
__cpp_lib_spanstream
|
std::spanbuf, std::spanstream | 202106L
|
(C++23) | P0448R4 |
__cpp_lib_ssize
|
std::ssize and unsigned std::span::size | 201902L
|
(C++20) | P1227R2 |
__cpp_lib_sstream_
|
Interfacing std::stringstreams with std::string_view | 202306L
|
(C++26) | P2495R3 |
__cpp_lib_stacktrace
|
Stacktrace library | 202011L
|
(C++23) | P0881R7 |
__cpp_lib_start_
|
Explicit lifetime management (std::start_lifetime_as) | 202207L
|
(C++23) | P2590R2 |
__cpp_lib_starts_
|
String prefix and suffix checking (starts_with() and ends_with() for std::string and std::string_view)
|
201711L
|
(C++20) | P0457R2 |
__cpp_lib_stdatomic_
|
Compatibility header for C atomic operations | 202011L
|
(C++23) | P0943R6 |
__cpp_lib_string_
|
contains() for std::basic_string and std::basic_string_view
|
202011L
|
(C++23) | P1679R3 |
__cpp_lib_string_
|
std::basic_string::resize_and_overwrite | 202110L
|
(C++23) | P1072R10 |
__cpp_lib_string_
|
User-defined literals for string types | 201304L
|
(C++14) | N3642 |
__cpp_lib_string_
|
std::string_view | 201606L
|
(C++17) | P0220R1 P0254R2 |
| ConstexprIterator | 201803L
|
(C++20) | P0858R0 LWG3257 | |
| Concatenation of std::strings and std::string_views | 202403L
|
(C++26) | P2591R5 | |
__cpp_lib_submdspan
|
std::submdspan | 202306L
|
(C++26) | P2630R4 |
| Padded mdspan layouts | 202403L
|
P2642R6 | ||
__cpp_lib_syncbuf
|
Synchronized buffered ostream (std::syncbuf, std::osyncstream) and manipulators | 201803L
|
(C++20) | P0053R7 P0753R2 |
__cpp_lib_text_encoding
|
std::text_encoding | 202306L
|
(C++26) | P1885R12 |
__cpp_lib_three_
|
Three-way comparison (library support); adding three-way comparison to the library | 201907L
|
(C++20) | P0768R1 P1614R2 |
__cpp_lib_to_address
|
Utility to convert a pointer to a raw pointer (std::to_address) | 201711L
|
(C++20) | P0653R2 |
__cpp_lib_to_array
|
std::to_array | 201907L
|
(C++20) | P0325R4 |
__cpp_lib_to_chars
|
Elementary string conversions (std::to_chars, std::from_chars) | 201611L
|
(C++17) | P0067R5 P0682R1 LWG3137 |
| Testing for success or failure of <charconv> functions | 202306L
|
(C++26) | P2497R0 | |
__cpp_lib_to_string
|
Redefining std::to_string in terms of std::format | 202306L
|
(C++26) | P2587R3 |
__cpp_lib_to_underlying
|
std::to_underlying | 202102L
|
(C++23) | P1682R3 |
__cpp_lib_transformation_
|
Alias templates for transformation traits | 201304L
|
(C++14) | N3655 |
__cpp_lib_transparent_
|
Transparent operator functors (std::less<> et al) | 201210L
|
(C++14) | N3421 |
| Transparent std::owner_less (std::owner_less<void>) | 201510L
|
(C++17) | P0074R0 | |
__cpp_lib_tuple_
|
std::tuple_element_t | 201402L
|
(C++14) | N3887 |
__cpp_lib_tuple_
|
Compatibility between std::tuple and tuple-like objects (std::pair, std::array, std::subrange) | 202207L
|
(C++23) | P2165R4 |
| Add tuple protocol to std::complex | 202311L
|
(C++26) | P2819R2 | |
__cpp_lib_tuples_
|
Addressing tuples by type | 201304L
|
(C++14) | N3670 |
__cpp_lib_type_identity
|
std::type_identity | 201806L
|
(C++20) | P0887R1 |
__cpp_lib_type_trait_
|
Type traits variable templates (std::is_void_v, etc) | 201510L
|
(C++17) | P0006R0 |
__cpp_lib_uncaught_
|
std::uncaught_exceptions | 201411L
|
(C++17) | N4259 |
__cpp_lib_unordered_
|
std::unordered_map::try_emplace, std::unordered_map::insert_or_assign | 201411L
|
(C++17) | N4279 |
__cpp_lib_unreachable
|
std::unreachable | 202202L
|
(C++23) | P0627R6 |
__cpp_lib_unwrap_
|
std::unwrap_ref_decay and std::unwrap_reference | 201811L
|
(C++20) | P0318R1 LWG3348 |
__cpp_lib_variant
|
std::variant: A type-safe union for C++17 | 201606L
|
(C++17) | P0088R3 P0393R3 P0032R3 |
| std::visit for classes derived from std::variant | 202102L
|
(C++23) (DR17) |
P2162R2 | |
| Fully constexpr std::variant | 202106L
|
(C++23) (DR20) |
P2231R1 | |
| Member visit | 202306L
|
(C++26) | P2637R3 | |
__cpp_lib_void_t
|
std::void_t | 201411L
|
(C++17) | N3911 |
| Total number of macros: 263 | ||||