SD-FeatureTest: Feature-Test Macros and Policies :
Standard C++ ([original](https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations)) ([raw](?raw))
Contents
- 1 Explanation and rationale for the approach
- 2 Recommendations
- 3 Policies
- 4 Table of Feature-Test Macros
- 5 References
Explanation and rationale for the approach
The pace of innovation in the standardization of C++ makes long-term stability of implementations unlikely. Features are added to the language because programmers want to use those features. Features are added to (the working draft of) the standard as the features become well-specified. In many cases a feature is added to an implementation well before or well after the standard officially introducing it is approved.
This process makes it difficult for programmers who want to use a feature to know whether it is available in any given implementation. Implementations rarely leap from one formal revision of the standard directly to the next; the implementation process generally proceeds by smaller steps. As a result, testing for a specific revision of the standard (e.g. by examining the value of the__cplusplus
macro) often gives the wrong answer. Implementers generally don’t want to appear to be claiming full conformance to a standard revision until all of its features are implemented. That leaves programmers with no portable way to determine which features are actually available to them.
It is often possible for a program to determine, in a manner specific to a single implementation, what features are supported by that implementation; but the means are often poorly documented and ad hoc, and sometimes complex – especially when the availability of a feature is controlled by an invocation option. To make this determination for a variety of implementations in a single source base is complex and error-prone.
Status quo before feature-test macros
Here is some code that attempts to determine whether rvalue references are available in the implementation in use:
#ifndef __USE_RVALUE_REFERENCES
#if (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ >= 3) || \
_MSC_VER >= 1600
#if __EDG_VERSION__ > 0
#define __USE_RVALUE_REFERENCES (__EDG_VERSION__ >= 410)
#else
#define __USE_RVALUE_REFERENCES 1
#endif
#elif __clang__
#define __USE_RVALUE_REFERENCES __has_feature(cxx_rvalue_references)
#else
#define __USE_RVALUE_REFERENCES 0
#endif
#endif
First, the GNU and Microsoft version numbers are checked to see if they are high enough. But then a check is made of the EDG version number, since that front end also has compatibility modes for both those compilers, and defines macros indicating (claimed) compatibility with them. If the feature wasn’t implemented in the indicated EDG version, it is assumed that the feature is not available – even though it is possible for a customer of EDG to implement a feature before EDG does.
Fortunately Clang has ways to test specifically for the presence of specific features. But unfortunately, the function-call-like syntax used for such tests won’t work with a standard preprocessor, so this fine new feature winds up adding its own flavor of complexity to the mix.
Also note that this code is only the beginning of a real-world solution. A complete solution would need to take into account more compilers, and also command-line option settings specific to various compilers.
Characteristics of the proposed solution
To preserve implementers’ freedom to add features in the order that makes the most sense for themselves and their customers, implementers should indicate the availability of each separate feature by adding a definition of a macro with the name corresponding to that feature.
Important note: By recommending the use of these macros, WG21 is not making any feature optional; the absence of a definition for the relevant feature-test macro does not make an implementation that lacks a feature conform to a standard that requires the feature. However, if implementers and programmers follow these recommendations, portability of code between real-world implementations should be improved.
To a first approximation, a feature is identified by the WG21 paper in which it is specified, and by which it is introduced into the working draft of the standard. Not every paper introduces a new feature worth a feature-test macro, but every paper that is not just a collection of issue resolutions is considered a candidate; exceptions are explicitly justified.
For C++14, the feature-test macro name generally consists of some combination of words from the title of the paper. In the future, it is hoped that every paper will include its own recommendations concerning feature-test macro names.
The value specified for a feature-test macro is based on the year and month in which the feature is voted into the working draft. In a case where a feature is subsequently changed in a significant way, but arguably remains the same feature, the value of the macro is changed to indicate the “revision level” of the specification of the feature. However, in most cases it is expected that the presence of a feature can be determined by the presence of any non-zero macro value; for example:
template<typename T>
struct use_empty_base_opt :
std::integral_constant<bool,
std::is_empty<T>::value
#if __cpp_lib_is_final
&& !std::is_final<T>::value
#endif
>
{ };
To avoid the user’s namespace, names of macros for language features are prefixed by __cpp_
; for library features, by __cpp_lib_
. A library feature that doesn’t introduce a new header is expected to be defined by the header(s) that implement the feature.
Examples
Selecting a more efficient compile-time implementation based on the availability of a feature:
#if __cpp_variadic_using // can use the compile-time efficient, flat inheritance template<typename ...T> struct Callable : T... { using T::operator() ...; }; #else // fall-back to linear recursion for older compilers template<typename ...T> struct Callable; template<typename T, typename ...U> struct Callable<T, U...> : T, Callable<U...> { using T::operator(); using Callable<U...>::operator(); }; template<typename T> struct Callable<T> : T { using T::operator(); }; template<> struct Callable<> {}; #endif
Likewise
#if __cpp_fold_expressions template<typename... T> auto sum(T... args) { return (args + ...); } #else auto sum() { return 0; } template<typename T> auto sum(T t) { return t; } template(typename T, typename... Ts) auto sum(T t, Ts... ts) { return t + sum(ts...); } #endif
Selecting a more efficient run-time implementation based on the availability of a feature:
void update(std::set<X>& set, const X& elem, int val) { auto pos = set.find(elem); if (pos == set.end()) return; #if __cpp_lib_node_extract auto next = std::next(pos); auto x = set.extract(pos); x.value().update(val); set.insert(next, std::move(x)); #else X tmp = *pos; pos = set.erase(pos); tmp.update(val); set.insert(pos, std::move(tmp)); #endif }
In some cases, the value of a feature-test macro can change over time as the underlying feature changes. To make it easier to follow the evolution of each feature, the tables in this document are grouped by macro name - with a row for each possible value and the proposal(s) associated with it.
Conditionally implementing a feature, based on __cpp_static_assert.
#if __cpp_static_assert # if __cpp_static_assert > 201400 # define Static_Assert(cond) static_assert(cond) # else # define Static_Assert(cond) static_assert(cond, #cond) # endif # define Static_Assert_Msg(cond, msg) static_assert(cond, msg) #else # define Static_Assert(cond) # define Static_Assert_Msg(cond, msg) #endif
Attributes can also change semantics over time, which is why the__has_cpp_attribute
facility described below evaluates to a value rather than simply1
or0
. This allows a user to conditionally provide a version of nodiscard based on__has_cpp_attribute(nodiscard):
#if __has_cpp_attribute(nodiscard) >= 201907 // nodiscard has a reason and can // be applied to constructors # define NODISCARD(msg) [[nodiscard(msg)]] # define NODISCARD_CTOR(msg) [[nodiscard(msg)]] #elif __has_cpp_attribute(nodiscard) >= 201603 // nodiscard doesn't have a reason, nor can # define NODISCARD(msg) [[nodiscard]] # define NODISCARD_CTOR(msg) #else // nodiscard doesn't exist at all yet # define NODISCARD(msg) # define NODISCARD_CTOR(msg) #endif
Recommendations
Introduction
For the sake of improved portability between partial implementations of various C++ standards, WG21 (the ISO technical committee for the C++ programming language) recommends that implementers and programmers follow the guidelines in this document concerning feature-test macros.
Implementers who provide a new standard feature should define a macro with the recommended name and value, in the same circumstances under which the feature is available (for example, taking into account relevant command-line options), to indicate the presence of support for that feature.
Programmers who wish to determine whether a feature is available in an implementation should base that determination on the state of the macro with the recommended name. (The absence of a tested feature may result in a program with decreased functionality, or the relevant functionality may be provided in a different way. A program that strictly depends on support for a feature can just try to use the feature unconditionally; presumably, on an implementation lacking necessary support, translation will fail. Therefore, if the most useful purpose for a feature-test macro would be to control the inclusion of a #error directive if the feature is unavailable, that is considered inadequate justification for the macro. Note that the usefulness of a test macro for a feature is completely independent of the usefulness of the feature itself.)
It is impossible for a C++ program to directly, reliably, and portably determine whether or not a library header is available for inclusion. Conditionally including a header requires the use of a configuration macro, whose setting can be determined by a configuration-test process at build time (reliable, but less portable), or by some other means (often not reliable or portable).
To solve this general problem, WG21 recommends that programmers use the __has_include
feature.
Syntax
h-preprocessing-token:
any preprocessing-token other than>
h-pp-tokens:
h-preprocessing-token
h-pp-tokens h-preprocessing-token
has-include-expression:
__has_include
(
header-name)
__has_include
(
string-literal)
__has_include
(
<
h-pp-tokens>
)
Semantics
In the first form of the has-include-expression, the parenthesized header-name token is not subject to macro expansion. The second and third forms are considered only if the first form does not match, and the preprocessing tokens are processed just as in normal text.
A has-include-expression shall appear only in the controlling constant expression of a #if
or #elif
directive ([cpp.cond] 16.1). Prior to the evaluation of such an expression, the source file identified by the parenthesized preprocessing token sequence in each contained_has-include-expression_ is searched for as if that preprocessing token sequence were the pp-tokens in a#include
directive, except that no further macro expansion is performed. If such a directive would not satisfy the syntactic requirements of a#include
directive, the program is ill-formed. The_has-include-expression_ is replaced by the pp-number 1
if the search for the source file succeeds, and by the pp-number 0
if the search fails.
The #ifdef
and #ifndef
directives, and the defined conditional inclusion operator, shall treat__has_include
as if it were the name of a defined macro. The identifier __has_include
shall not appear in any context not mentioned in this section.
Example
This demonstrates a way to use a library optional facility only if it is available. Note that having __has_include(<optional>)
succeed is insufficient since on many toolchains, headers may exist in installations but have their contents guarded based on compile flags. For example, the following:
#ifdef __has_include
#if __has_include(<optional>)
#include <optional>
std::optional<int> o;
#endif
#endif
int main(){ }
will still fail to compile with g++ -std=c++14
(using libstdc++).
Hence, we need to do:
#ifdef __has_include
# if __has_include(<optional>)
# include <optional>
# if __cpp_lib_optional >= 201606
# define have_optional 1
# endif
# elif __has_include(<experimental/optional>)
# include <experimental/optional>
# if __cpp_lib_experimental_optional >= 201400
# define have_optional 1
# define experimental_optional 1
# endif
#endif
#ifndef have_optional
# define have_optional 0
#endif
Additionally, the <version>
header [P0754R2] is a light-weight header that defines all the standard library feature-test macros. An alternate implementation could be:
#ifndef __has_include
# define __has_include(x) 0
#endif
#if __has_include(<version>)
# include <version>
#elif __has_include(<optional>)
# include <optional>
#endif
#if __cpp_lib_optional >= 201606
# define have_optional 1
#else
# define have_optional 0
#endif
Testing for the presence of an attribute: __has_cpp_attribute
A C++ program cannot directly, reliably, and portably determine whether or not a standard or vendor-specific attribute is available for use. Testing for attribute support generally requires complex macro logic, as illustrated above for language features in general.
To solve this general problem, WG21 recommends that programmers use the __has_cpp_attribute
feature.
Syntax
has-attribute-expression:
__has_cpp_attribute
(
attribute-token)
Semantics
A has-attribute-expression shall appear only in the controlling constant expression of a #if
or #elif
directive ([cpp.cond] 16.1). The has-attribute-expression is replaced by a non-zero pp-number if the implementation supports an attribute with the specified name, and by the_pp-number_ 0
otherwise.
For a standard attribute, the value of the __has_cpp_attribute
macro is based on the year and month in which the attribute was voted into the working draft. In the case where the attribute is vendor-specific, the value is implementation-defined. However, in most cases it is expected that the availability of an attribute can be detected by any non-zero result.
The #ifdef
and #ifndef
directives, and the defined conditional inclusion operator, shall treat__has_cpp_attribute
as if it were the name of a defined macro. The identifier __has_cpp_attribute
shall not appear in any context not mentioned in this section.
Example
This demonstrates a way to use the attribute [[deprecated]]
only if it is available.
#ifndef __has_cpp_attribute
# define __has_cpp_attribute(x) 0
#endif
#if __has_cpp_attribute(deprecated)
# define ATTR_DEPRECATED(msg) [[deprecated(msg)]]
#else
# define ATTR_DEPRECATED(msg)
#endif
Policies
SG-10 has adopted a number of policies related to our standard practices for determining and naming macros.
constexpr
For the language, we will have a single__cpp_constexpr
macro. It will be bumped every time we extend constexpr in the language. For the library, we will add a specific feature-test macros for significant, special features. Otherwise, for those cases where we are just adding constexpr to more things in the library, we will have a dedicated test macro per header and just bump that header-specific macro on each change. That macro will be named__cpp_lib_constexpr_HEADER
(with the exception of a few preexisting macros for array and algorithm which have slightly different names).
From [P1902R1].
Language Features with Library Components
In some cases a feature requires two macros, one for the language and one for the library. For example, the library does not want to define its three-way comparison operations unless the compiler supports the feature.
For end-users, it is suggested that they test only the library macro, as that will only be true if the language macro is also true. As a result, the language macros contain “impl
” to distinguish them from the more general version that is expected to be set by the library.
Note that originally SG10 suggested that the library version of the macro not include the usual _lib
part, but LWG was not comfortable with the inconsistency of having a library macro (which requires a header before it can be used) that does not contain _lib
.
Also note that SG10 originally proposed that the core feature tests include _lang
, but LWG wanted something that more clearly implied that the the macro was for a core feature and not intended to be used by end-users. They sugggested that_impl
be used instead.
From [P1353R0].
Table of Feature-Test Macros
The following are all the feature-test macros in the standard, broken up by language macros, attribute macros, and library macros, then sorted by name. Each macro will contain its list of possible values and the papers necessary to be implemented before an implementation should define that macro with that particular value.
Note that a given paper may introduce or update multiple feature-test macros. A given value may require multiple papers. A paper may also_remove_ a feature-test macro, in which case its value will be specified as deleted.
Language Feature-Test Macros
All of the language macros are predefined (i.e. no header needs to be included before doing checks).
In some cases, a feature requires two macros: one for the language and one for the library. For example, the library does not want to define its three-way comparison operators unless the compiler supports the feature. In these cases, it is suggested for end-users that they only test the library macro. Those core language feature-test macros that are intended to be checked by the library are spelled__cpp_impl_*
.
Macro | Value | Paper(s) |
---|---|---|
[__cpp_deleted_function](# %5F%5Fcpp%5Fdeleted%5Ffunction) | 202403 | [P2573R2] = delete(“should have a reason”); |
__cpp_aggregate_bases | 201603 | [P0017R1] Extension to aggregate initialization |
__cpp_aggregate_nsdmi | 201304 | [N3653]Member initializers and aggregates |
__cpp_aggregate_paren_init | 201902 | [P0960R3] Allow initializing aggregates from a parenthesized list of values |
__cpp_alias_templates | 200704 | [N2258]Templates Aliases |
__cpp_aligned_new | 201606 | [P0035R4] Dynamic memory allocation for over-aligned data |
__cpp_attributes | 200809 | [N2761]Towards support for attributes in C++ (Revision 6) |
__cpp_binary_literals | 201304 | [N3472]Binary Literals in the C++ Core Language |
__cpp_capture_star_this | 201603 | [P0018R3] Lambda Capture of *thisby Value as [=,*this] |
__cpp_char8_t | 201811 | [P0482R6] char8_t: A type for UTF-8 characters and strings (Revision 6) |
202207 | [P2513R3] char8_t Compatibility and Portability Fix | |
__cpp_concepts | 201707 | [P0734R0] Wording Paper, C++ extensions for Concepts |
201811 | [P1084R2] Today’s return-type-requirements Are Insufficient | |
201907 | [P1452R2] On the non-uniform semantics of return-type-requirements | |
202002 | [P0848R3] Conditionally Trivial Special Member Functions | |
__cpp_conditional_explicit | 201806 | [P0892R2] explicit(bool) |
__cpp_consteval | 201811 | [P1073R3] Immediate functions |
202211 | [P2564R3] consteval needs to propagate up | |
__cpp_constexpr | 200704 | [N2235]Generalized Constant Expressions—Revision 5 |
201304 | [N3652]Relaxing constraints on constexpr functions / constexpr member functions and implicit const | |
201603 | [P0170R1] Wording for Constexpr Lambda | |
201806 | [P1064R0] Allowing Virtual Function Calls in Constant Expressions | |
201811 | [P1002R1] Try-catch blocks in constexpr functions [P1327R1] Allowing dynamic_cast, polymorphic typeid in Constant Expressions | |
201907 | [P1331R2] Permitting trivial default initialization in constexpr contexts [P1668R1] Enabling constexpr Intrinsics By Permitting Unevaluated inline-assembly in constexpr Functions | |
202002 | [P1330R0] Changing the active member of a union inside constexpr | |
202110 | [P2242R3] Non-literal variables (and labels and gotos) in constexpr functions | |
202207 | [P2448R2] Relaxing some constexpr restrictions | |
202211 | [P2647R1] Permitting static constexpr variables in constexpr functions | |
202306 | [P2738R1] constexpr cast from void*: towards constexpr type-erasure | |
__cpp_constexpr_dynamic_alloc | 201907 | [P0784R7] More constexpr containers |
__cpp_constexpr_in_decltype | 201711 | [P0859R0] Core Issue 1581: When are constexpr member functions defined? |
__cpp_constinit | 201907 | [P1143R2] Adding theconstinitkeyword |
__cpp_decltype | 200707 | [N2343]Decltype (revision 7): proposed wording |
__cpp_decltype_auto | 201304 | [N3638]Return type deduction for normal functions |
__cpp_deduction_guides | 201606 | [P0091R3] Template argument deduction for class templates (Rev. 6) |
201611 | [P0512R0] Class Template Argument Deduction Assorted NB resolution and issues | |
201703 | [P0620R0] Drafting for class template argument deduction issues | |
201907 | [P1814R0] Wording for Class Template Argument Deduction for Alias Templates [P1816R0] Wording for class template argument deduction for aggregates | |
__cpp_delegating_constructors | 200604 | [N1986]Delegating Constructors (revision 3) |
__cpp_designated_initializers | 201707 | [P0329R4] Designated Initialization Wording |
__cpp_enumerator_attributes | 201411 | [N4266]Attributes for namespaces and enumerators |
__cpp_exceptions | 199711 | Exception handling |
__cpp_explicit_this_parameter | 202110 | [P0847R7] Deducing this |
__cpp_fold_expressions | 201411 | [N4295]Folding Expressions |
201603 | [P0036R0] Unary Folds and Empty Parameter Packs (Revision 1) | |
__cpp_generic_lambdas | 201304 | [N3649]Generic (Polymorphic) Lambda Expressions (Revision 3) |
201707 | [P0428R2] Familiar template syntax for generic lambdas | |
__cpp_guaranteed_copy_elision | 201606 | [P0135R1] Wording for guaranteed copy elision through simplified value categories |
__cpp_hex_float | 201603 | [P0245R1] Hexadecimal float literals for C++ |
__cpp_if_consteval | 202106 | [P1938R3] if consteval |
__cpp_if_constexpr | 201606 | [P0292R2] constexpr if: A slightly different syntax |
__cpp_impl_coroutine | 201902 | [P0912R5] Merge Coroutines TS into C++20 working draft [LWG3393] Missing/incorrect feature test macro for coroutines |
__cpp_impl_destroying_delete | 201806 | [P0722R3] Efficient sized delete for variable sized classes |
__cpp_impl_three_way_comparison | 201711 | [P0515R3] Consistent comparison[P0768R1] Library Support for the Spaceship (Comparison) Operator |
201902 | [P1185R2] <=> != == | |
201907 | [P1630R1] Spaceship needs a tune-up | |
__cpp_implicit_move | 202207 | [P2266R3] Simpler implicit move |
__cpp_inheriting_constructors | 200802 | [N2540]Inheriting Constructors (revision 5) |
201511 | [P0136R1] Rewording inheriting constructors (core issue 1941 et al) | |
__cpp_init_captures | 201304 | [N3648]Wording Changes for Generalized Lambda-capture |
201803 | [P0780R2] Allow pack expansion in lambda init-capture | |
__cpp_initializer_lists | 200806 | [N2672]Initializer List proposed wording |
__cpp_inline_variables | 201606 | [P0386R2] Inline Variables |
__cpp_lambdas | 200907 | [N2927]New wording for C++0x Lambdas (rev. 2) |
__cpp_modules | 201907 | [P1103R3] Merging Modules [P1811R0] Relaxing redefinition restrictions for re-exportation robustness |
__cpp_multidimensional_subscript | 202110 | [P2128R6] Multidimensional subscript operator |
202211 | [P2589R1] static operator[] | |
__cpp_named_character_escapes | 202207 | [P2071R2] Named universal character escapes |
__cpp_namespace_attributes | 201411 | [N4266]Attributes for namespaces and enumerators |
__cpp_noexcept_function_type | 201510 | [P0012R1] Make exception specifications be part of the type system, version 5 |
__cpp_nontype_template_args | 201411 | [N4268]Allow constant evaluation for all non-type template arguments |
201911 | [P1907R1] Inconsistencies with non-type template parameters | |
__cpp_nontype_template_parameter_auto | 201606 | [P0127R2] Declaring non-type template arguments with auto |
__cpp_nontype_template_parameter_class | 201806 | [P0732R2] Class Types in Non-Type Template Parameters |
[P1907R1] Inconsistencies with non-type template parameters | ||
__cpp_nsdmi | 200809 | [N2756]Non-static data member initializers |
__cpp_pack_indexing | 202311 | [P2662R3] Pack Indexing |
__cpp_placeholder_variables | 202306 | [P2169R4] A Nice Placeholder With No Name |
__cpp_range_based_for | 200907 | [N2930]Range-Based For Loop Wording (Without Concepts) |
201603 | [P0184R0] Generalizing the Range-Based For Loop | |
202211 | [P2644R1] Final Fix of Broken Range based for Loop Rev 1 [P2718R0] Wording for P2644R1 Fix for Range-based for Loop [CWG2659] Missing feature-test macro for lifetime extension in range-for loop | |
__cpp_raw_strings | 200710 | [N2442]Raw and Unicode String Literals; Unified Proposal (Rev. 2) |
__cpp_ref_qualifiers | 200710 | [N2439]Extending move semantics to *this(revised wording) |
__cpp_return_type_deduction | 201304 | [N3638]Return type deduction for normal functions |
__cpp_rtti | 199711 | Run-time type identification |
__cpp_rvalue_references | 200610 | [N2118] A Proposal to Add an Rvalue Reference to the C++ Language: Proposed Wording: Revision 3 |
__cpp_size_t_suffix | 202011 | [P0330R8] Literal Suffixes for (signed) size_t |
__cpp_sized_deallocation | 201309 | [N3778]C++ Sized Deallocation |
__cpp_static_assert | 200410 | [N1720]Proposal to Add Static Assertions to the Core Language (Revision 3) |
201411 | [N3928]Extending static_assert, v2 | |
202306 | [P2741R3] user-generated static_assert messages | |
__cpp_static_call_operator | 202207 | [P1169R4] static operator() |
__cpp_structured_bindings | 201606 | [P0217R3] Proposed wording for structured bindings |
202403 | [P0609R3] Attributes for Structured Bindings | |
__cpp_template_template_args | 201611 | [P0522R0] DR: Matching of template template-arguments excludes compatible templates |
__cpp_threadsafe_static_init | 200806 | [N2660]Dynamic Initialization and Destruction with Concurrency |
__cpp_unicode_characters | 200704 | [N2249]New Character Types in C++ |
__cpp_unicode_literals | 200710 | [N2442]Raw and Unicode String Literals; Unified Proposal (Rev. 2) |
__cpp_user_defined_literals | 200809 | [N2765]User-defined Literals (aka. Extensible Literals (revision 5)) |
__cpp_using_enum | 201907 | [P1099R5] Using Enum |
__cpp_variable_templates | 201304 | [N3651]Variable Templates (Revision 1) |
__cpp_variadic_friend | 202403 | [P2893R3] Variadic Friends |
__cpp_variadic_templates | 200704 | [N2242]Proposed Wording for Variadic Templates (Revision 2) |
__cpp_variadic_using | 201611 | [P0195R2] Pack expansions in_using-declaration_s |
Attribute Feature-Test Macros
All of the following macros are predefined.
Macro | Value | Paper(s) |
---|---|---|
__has_cpp_attribute(assume) | 202207 | [P1774R8] Portable assumptions[CWG2615] Missing __has_cpp_attribute(assume) |
__has_cpp_attribute(carries_dependency) | 200809 | [N2782]C++ Data-Dependency Ordering: Function Annotation |
__has_cpp_attribute(deprecated) | 201309 | [N3760] [[deprecated]]attribute |
__has_cpp_attribute(fallthrough) | 201603 | [P0188R1] Wording for [[fallthrough]]attribute |
__has_cpp_attribute(likely) | 201803 | [P0479R5] Proposed wording for likely and unlikely attributes |
__has_cpp_attribute(maybe_unused) | 201603 | [P0212R1] Wording for [[maybe_unused]]attribute |
__has_cpp_attribute(no_unique_address) | 201803 | [P0840R2] Language support for empty objects |
__has_cpp_attribute(nodiscard) | 201603 | [P0189R1] Wording for [[nodiscard]]attribute |
201907 | [P1301R4] [[nodiscard("should have a reason")]] [P1771R1] [[nodiscard]]for constructors | |
__has_cpp_attribute(noreturn) | 200809 | [N2761]Towards support for attributes in C++ (Revision 6) |
__has_cpp_attribute(unlikely) | 201803 | [P0479R5] Proposed wording for likely and unlikely attributes |
Library Feature-Test Macros
All of the following macros are defined after inclusion of the header<version>
or one of the corresponding headers specified below.
Macro | Header(s) | Value | Paper(s) |
---|---|---|---|
__cpp_lib_adaptor_iterator_pair_constructor | <queue> <stack> | 202106 | [P1425R4] Iterators pair constructors for stack and queue |
__cpp_lib_addressof_constexpr | <memory> | 201603 | [LWG2296] std::addressofshould beconstexpr |
__cpp_lib_algorithm_iterator_requirements | <algorithm> <memory> <numeric> | 202207 | [P2408R5] Ranges iterators as inputs to non-Ranges algorithms |
__cpp_lib_allocate_at_least | <memory> | 202106 | [P0401R6] Providing size feedback in the Allocator interface |
202306 | [LWG3887] Version macro for allocate_at_least | ||
__cpp_lib_allocator_traits_is_always_equal | <deque> <forward_list> <list> <map> <memory> <scoped_allocator> <set> <string> <unordered_map> <unordered_set> <vector> | 201411 | [N4258]Cleaning upnoexcept in the Library (Rev 3) |
__cpp_lib_any | <any> | 201603 | [P0220R1] Adopt Library Fundamentals V1 TS Components for C++17 (R1) |
201606 | [P0032R3] Homogeneous interface for variant, any and optional (Revision 3) | ||
__cpp_lib_apply | <tuple> | 201603 | [P0220R1] Adopt Library Fundamentals V1 TS Components for C++17 (R1) |
__cpp_lib_array_constexpr | <array> <iterator> | 201603 | [P0031R0] A Proposal to Add Constexpr Modifiers to reverse_iterator, move_iterator, array and Range Access |
201803 | [P0858R0] Constexpr iterator requirements[LWG3257] Missing feature testing macro update from P0858 | ||
201806 | [P1023R0] constexpr comparison operators for std::array | ||
201811 | [P1032R1] Misc constexpr bits | ||
__cpp_lib_as_const | <utility> | 201510 | [P0007R1] Constant View: A proposal for astd::as_consthelper function template |
__cpp_lib_associative_heterogeneous_erasure | <map> <set> <unordered_map> <unordered_set> | 202110 | [P2077R3] Heterogeneous erasure overloads for associative containers |
__cpp_lib_associative_heterogeneous_insertion | <map> <set> <unordered_map> <unordered_set> | 202306 | [P2363R5] Extending associative containers with the remaining heterogeneous overloads |
__cpp_lib_assume_aligned | <memory> | 201811 | [P1007R3] std::assume_aligned |
__cpp_lib_atomic_flag_test | <atomic> | 201907 | [P1135R6] The C++20 Synchronization Library |
__cpp_lib_atomic_float | <atomic> | 201711 | [P0020R6] Floating Point Atomic |
__cpp_lib_atomic_is_always_lock_free | <atomic> | 201603 | [P0152R1] constexpr atomic<T>::is_always_lock_free |
__cpp_lib_atomic_lock_free_type_aliases | <atomic> | 201907 | [P1135R6] The C++20 Synchronization Library |
__cpp_lib_atomic_min_max | <atomic> | 202403 | [P0493R5] Atomic maximum/minimum |
__cpp_lib_atomic_ref | <atomic> | 201806 | [P0019R8] Atomic Ref |
__cpp_lib_atomic_shared_ptr | <memory> | 201711 | [P0718R2] Revising atomic_shared_ptr for C++20 |
__cpp_lib_atomic_value_initialization | <atomic> <memory> | 201911 | [P0883R2] Fixing Atomic Initialization |
__cpp_lib_atomic_wait | <atomic> | 201907 | [P1135R6] The C++20 Synchronization Library |
__cpp_lib_barrier | <barrier> | 201907 | [P1135R6] The C++20 Synchronization Library |
202302 | [P2588R3] Relax std::barrier phase completion step guarantees | ||
__cpp_lib_bind_back | <functional> | 202202 | [P2387R3] Pipe support for user-defined range adaptors |
202306 | [P2714R1] Bind front and back to NTTP callables | ||
__cpp_lib_bind_front | <functional> | 201811 | [P0356R5] Simplified partial function application |
201907 | [P1651R0] bind_front should not unwrap reference_wrapper | ||
202306 | [P2714R1] Bind front and back to NTTP callables | ||
__cpp_lib_bit_cast | <bit> | 201806 | [P0476R2] Bit-casting object representations |
__cpp_lib_bitops | <bit> | 201907 | [P0553R4] Bit operations |
__cpp_lib_bitset | <bitset> | 202306 | [P2697R1] Interfacing bitset with string_view |
__cpp_lib_bool_constant | <type_traits> | 201505 | [N4389]Wording for bool_constant, revision 1 |
__cpp_lib_bounded_array_traits | <type_traits> | 201902 | [P1357R1] Traits for [Un]bounded Arrays |
__cpp_lib_boyer_moore_searcher | <functional> | 201603 | [P0220R1] Adopt Library Fundamentals V1 TS Components for C++17 (R1) |
__cpp_lib_byte | <cstddef> | 201603 | [P0298R3] A byte type definition |
__cpp_lib_byteswap | <bit> | 202110 | [P1272R4] Byteswapping for fun&&nuf |
__cpp_lib_char8_t | <atomic> <filesystem> <istream> <limits> <locale> <ostream> <string> <string_view> | 201811 | [P0482R6] char8_t: A type for UTF-8 characters and strings (Revision 6) |
201907 | [P1423R3] char8_tbackward compatibility remediation | ||
__cpp_lib_chrono | <chrono> | 201510 | [P0092R1] Polishing <chrono> |
201611 | [P0505R0] Wording for GB 50 | ||
201803 | [P0355R7] Extending <chrono>to Calendars and Time Zones | ||
201907 | [P1466R3] Miscellaneous minor fixes for chrono | ||
202306 | [P2592R3] Hashing support for std::chrono value classes | ||
__cpp_lib_chrono_udls | <chrono> | 201304 | [N3642]User-defined Literals for Standard Library Types (part 1 - version 4) |
__cpp_lib_clamp | <algorithm> | 201603 | [P0025R0] An algorithm to “clamp” a value between a pair of boundary values |
__cpp_lib_common_reference | <type_traits> | 202302 | [P2655R3] common_reference_t of reference_wrapper Should Be a Reference Type |
__cpp_lib_common_reference_wrapper | <functional> | 202302 | [P2655R3] common_reference_t of reference_wrapper Should Be a Reference Type |
__cpp_lib_complex_udls | <complex> | 201309 | [N3779]User-defined Literals forstd::complex |
__cpp_lib_concepts | <compare> <concepts> | 201806 | [P0898R3] Standard Library Concepts |
201907 | [P1754R1] Rename concepts to standard_case for C++20, while we still can | ||
202002 | [P1964R2] Wording for boolean-testable | ||
202207 | [P2404R3] Move-only types for equality_comparable_with, totally_ordered_with, and three_way_comparable_with | ||
__cpp_lib_constexpr_algorithms | <algorithm> <utility> | 201703 | [P0202R3] Add Constexpr Modifiers to Functions in <algorithm>and <utility>Headers |
201806 | [P0879R0] Constexpr for swap and swap related functions [LWG3256] Feature testing macro for constexpr algorithms [LWG3792] __cpp_lib_constexpr_algorithms should also be defined in | ||
202306 | [P2562R1] constexpr Stable Sorting | ||
__cpp_lib_constexpr_bitset | <bitset> | 202207 | [P2417R2] A more constexpr bitset |
__cpp_lib_constexpr_charconv | <charconv> | 202207 | [P2291R3] Add Constexpr Modifiers to Functions to_chars and from_chars for Integral Types in Header |
__cpp_lib_constexpr_cmath | <cmath> <cstdlib> | 202202 | [P0533R9] constexpr for cmath and cstdlib |
202306 | [P1383R2] More constexpr for cmath and complex | ||
__cpp_lib_constexpr_complex | <complex> | 201711 | [P0415R1] Constexpr for std::complex |
202306 | [P1383R2] More constexpr for cmath and complex | ||
__cpp_lib_constexpr_dynamic_alloc | <memory> | 201907 | [P0784R7] More constexpr containers |
__cpp_lib_constexpr_functional | <functional> | 201811 | [P1032R1] Misc constexpr bits |
201907 | [P1065R2] constexpr_INVOKE_ | ||
__cpp_lib_constexpr_iterator | <iterator> | 201811 | [P1032R1] Misc constexpr bits |
__cpp_lib_constexpr_memory | <memory> | 201811 | [P1006R1] Constexpr in std::pointer_traits |
202202 | [P2273R3] Making std::unique_ptr constexpr | ||
__cpp_lib_constexpr_numeric | <numeric> | 201911 | [P1645R1] constexpr for numeric algorithms |
__cpp_lib_constexpr_string | <string> | 201611 | [P0426R1] Constexpr for std::char_traits |
201811 | [P1032R1] Misc constexpr bits | ||
201907 | [P0980R1] Makingstd::stringconstexpr | ||
__cpp_lib_constexpr_string_view | <string_view> | 201611 | [P0426R1] Constexpr for std::char_traits |
201811 | [P1032R1] Misc constexpr bits | ||
__cpp_lib_constexpr_tuple | <tuple> | 201811 | [P1032R1] Misc constexpr bits |
__cpp_lib_constexpr_typeinfo | <typeinfo> | 202106 | [P1328R1] Making std::type_info::operator== constexpr |
__cpp_lib_constexpr_utility | <utility> | 201811 | [P1032R1] Misc constexpr bits |
__cpp_lib_constexpr_vector | <vector> | 201907 | [P1004R2] Makingstd::vectorconstexpr |
__cpp_lib_constrained_equality | <optional> <tuple> <utility> <variant> | 202403 | [P2944R3] Comparisons for reference_wrapper |
__cpp_lib_containers_ranges | <deque> <forward_list> <list> <map> <queue> <set> <stack> <string> <unordered_map> <unordered_set> <vector> | 202202 | [P1206R7] Conversions from ranges to containers |
__cpp_lib_copyable_function | <functional> | 202306 | [P2548R6] copyable_function |
__cpp_lib_coroutine | <coroutine> | 201902 | [P0912R5] Merge Coroutines TS into C++20 working draft [LWG3393] Missing/incorrect feature test macro for coroutines |
__cpp_lib_debugging | <debugging> | 202311 | [P2546R5] Debugging Support |
202403 | [P2810R4] is_debugger_present is_replaceable | ||
__cpp_lib_deduction_guides | 201703 | [P0433R2] Toward a resolution of US7 and US14: Integrating template deduction for class templates into the standard library | |
__cpp_lib_default_template_type_for_algorithm_values | <algorithm> <deque> <forward_list> <list> <ranges> <string> <vector> | 202403 | [P2248R8] Enabling list-initialization for algorithms |
__cpp_lib_destroying_delete | <new> | 201806 | [P0722R3] Efficient sized delete for variable sized classes |
__cpp_lib_enable_shared_from_this | <memory> | 201603 | [P0033R1] Re-enabling shared_from_this (revision 1) |
__cpp_lib_endian | <bit> | 201907 | [P0463R1] endian, Just endian [P1612R1] Relocate Endian’s Specification |
__cpp_lib_erase_if | <deque> <forward_list> <list> <map> <set> <string> <unordered_map> <unordered_set> <vector> | 201811 | [P1209R0] Adopt Consistent Container Erasure from Library Fundamentals 2 for C++20 |
202002 | [P1115R3] Improving the Return Value of Erase-Like Algorithms II: Free erase/erase_if | ||
__cpp_lib_exchange_function | <utility> | 201304 | [N3668] exchange()utility function, revision 3 |
__cpp_lib_execution | <execution> | 201603 | [P0024R2] The Parallelism TS Should be Standardized |
201902 | [P1001R2] Target Vectorization Policies from Parallelism V2 TS to C++20 | ||
__cpp_lib_expected | <expected> | 202202 | [P0323R12] std::expected |
202211 | [P2505R5] Monadic Functions for std::expected | ||
__cpp_lib_filesystem | <filesystem> | 201603 | [P0218R1] Adopt File System TS for C++17 |
201606 | [P0219R1] Relative Paths for Filesystem[P0392R0] Adapting string_view by filesystem paths | ||
201703 | [P0317R1] Directory Entry Caching for Filesystem | ||
__cpp_lib_flat_map | <flat_map> | 202207 | [P0429R9] A Standard flat_map |
__cpp_lib_flat_set | <flat_set> | 202207 | [P1222R4] A Standard flat_set [LWG3751] Missing feature macro for flat_set |
__cpp_lib_format | <format> | 201907 | [P0645R10] Text Formatting [P1361R2] Integration of chrono with text formatting [P1652R1] Printf corner cases in std::format |
202106 | [P2216R3] std::format improvements | ||
202110 | [P2372R3] Fixing locale handling in chrono formatters [P2418R2] Add support for std::generator-like types to std::format | ||
202207 | [P2419R2] Clarify handling of encodings in localized formatting of chrono types [P2508R1] Exposing std::basic-format-string | ||
202304 | [P2510R3] Formatting pointers | ||
202305 | [P2757R3] Type checking format args | ||
202306 | [P2637R3] Member visit | ||
202311 | [P2918R2] Runtime format strings II | ||
__cpp_lib_format_path | <filesystem> | 202403 | [P2845R8] Formatting of std::filesystem::path |
__cpp_lib_format_ranges | <format> | 202207 | [P2286R8] Formatting Ranges [P2585R1] Improving default container formatting [LWG3750] Too many papers bump __cpp_lib_format |
__cpp_lib_format_uchar | <format> | 202311 | [P2909R4] Fix formatting of code units as integers (Dude, where’s my char?) |
__cpp_lib_forward_like | <utility> | 202207 | [P2445R1] forward_like |
__cpp_lib_freestanding_algorithm | <algorithm> | 202311 | [P2407R5] Freestanding Library: Partial Classes |
__cpp_lib_freestanding_array | <array> | 202311 | [P2407R5] Freestanding Library: Partial Classes |
__cpp_lib_freestanding_char_traits | <string> | 202306 | [P2338R4] Freestanding Library: Character primitives and the C library |
__cpp_lib_freestanding_charconv | <charconv> | 202306 | [P2338R4] Freestanding Library: Character primitives and the C library |
__cpp_lib_freestanding_cstdlib | <cmath> <cstdlib> | 202306 | [P2338R4] Freestanding Library: Character primitives and the C library |
__cpp_lib_freestanding_cstring | <cstring> | 202306 | [P2338R4] Freestanding Library: Character primitives and the C library |
202311 | [P2937R0] Freestanding: Remove strtok | ||
__cpp_lib_freestanding_cwchar | <cwchar> | 202306 | [P2338R4] Freestanding Library: Character primitives and the C library |
__cpp_lib_freestanding_errc | <cerrno> <system_error> | 202306 | [P2338R4] Freestanding Library: Character primitives and the C library |
__cpp_lib_freestanding_expected | <expected> | 202311 | [P2833R2] Freestanding Library: inout expected span |
__cpp_lib_freestanding_feature_test_macros | 202306 | [P2198R7] Freestanding Feature-Test Macros and Implementation-Defined Extensions | |
__cpp_lib_freestanding_functional | <functional> | 202306 | [P2198R7] Freestanding Feature-Test Macros and Implementation-Defined Extensions |
__cpp_lib_freestanding_iterator | <iterator> | 202306 | [P2198R7] Freestanding Feature-Test Macros and Implementation-Defined Extensions |
__cpp_lib_freestanding_mdspan | <mdspan> | 202311 | [P2833R2] Freestanding Library: inout expected span |
__cpp_lib_freestanding_memory | <memory> | 202306 | [P2198R7] Freestanding Feature-Test Macros and Implementation-Defined Extensions |
__cpp_lib_freestanding_operator_new | <operator_new> | 202306 | [P2198R7] Freestanding Feature-Test Macros and Implementation-Defined Extensions |
__cpp_lib_freestanding_optional | <optional> | 202311 | [P2407R5] Freestanding Library: Partial Classes |
__cpp_lib_freestanding_ranges | <ranges> | 202306 | [P2198R7] Freestanding Feature-Test Macros and Implementation-Defined Extensions |
__cpp_lib_freestanding_ratio | <ratio> | 202306 | [P2198R7] Freestanding Feature-Test Macros and Implementation-Defined Extensions |
__cpp_lib_freestanding_string_view | <string_view> | 202311 | [P2407R5] Freestanding Library: Partial Classes |
__cpp_lib_freestanding_tuple | <tuple> | 202306 | [P2198R7] Freestanding Feature-Test Macros and Implementation-Defined Extensions |
__cpp_lib_freestanding_utility | <utility> | 202306 | [P2198R7] Freestanding Feature-Test Macros and Implementation-Defined Extensions |
__cpp_lib_freestanding_variant | <variant> | 202311 | [P2407R5] Freestanding Library: Partial Classes |
__cpp_lib_fstream_native_handle | <fstream> | 202306 | [P1759R6] Native handles and file streams |
__cpp_lib_function_ref | <functional> | 202306 | [P0792R14] function_ref: a non-owning reference to a Callable |
__cpp_lib_gcd_lcm | <numeric> | 201606 | [P0295R0] Adopt Selected Library Fundamentals V2 Components for C++17 |
__cpp_lib_generate_random | <random> | 202403 | [P1068R11] Vector API for random number generation |
__cpp_lib_generator | <generator> | 202207 | [P2502R2] std::generator: Synchronous Coroutine Generator for Ranges |
__cpp_lib_generic_associative_lookup | <map> <set> | 201304 | [N3657]Adding heterogeneous comparison lookup to associative containers (rev 4) |
__cpp_lib_generic_unordered_hash_lookup | 201902 | [P0920R2] Precalculated hash values in lookup | |
[P1661R1] Remove dedicated precalculated hash lookup interface | |||
__cpp_lib_generic_unordered_lookup | <unordered_map> <unordered_set> | 201811 | [P0919R3] Heterogeneous lookup for unordered containers |
__cpp_lib_hardware_interference_size | <new> | 201703 | [P0154R1] constexpr std::thread::hardware_{true,false}_sharing_size |
__cpp_lib_has_unique_object_representations | <type_traits> | 201606 | [P0258R2]has_unique_object_representations - wording |
__cpp_lib_hazard_pointer | <hazard_pointer> | 202306 | [P2545R4] Read-Copy Update (RCU) |
__cpp_lib_hypot | <cmath> | 201603 | [P0030R1] Proposal to Introduce a 3-Argument Overload to std::hypot |
__cpp_lib_incomplete_container_elements | <forward_list> <list> <vector> | 201505 | [N4510]Minimal incomplete type support for standard containers, revision 4 |
__cpp_lib_int_pow2 | <bit> | 201806 | [P0556R3] Integral power-of-2 operations |
202002 | [P1956R1] On the naming of low-level bit manipulation functions | ||
__cpp_lib_integer_comparison_functions | <utility> | 202002 | [P0586R2] Safe integral comparisons |
__cpp_lib_integer_sequence | <utility> | 201304 | [N3658]Compile-time integer sequences |
__cpp_lib_integral_constant_callable | <type_traits> | 201304 | [N3545] An Incremental Improvement tointegral_constant |
__cpp_lib_interpolate | <cmath> <numeric> | 201902 | [P0811R3] Well-behaved interpolation for numbers and pointers |
__cpp_lib_invoke | <functional> | 201411 | [N4169] A proposal to add invoke function template (Revision 1) |
__cpp_lib_invoke_r | <functional> | 202106 | [P2136R3] invoke_r |
__cpp_lib_ios_noreplace | <ios> | 202207 | [P2467R1] Support exclusive mode for fstreams |
__cpp_lib_is_aggregate | <type_traits> | 201703 | [LWG2911] Anis_aggregate type trait is needed |
__cpp_lib_is_constant_evaluated | <type_traits> | 201811 | [P0595R2] std::is_constant_evaluated |
__cpp_lib_is_final | <type_traits> | 201402 | [LWG2112] User-defined classes that cannot be derived from |
__cpp_lib_is_implicit_lifetime | <type_traits> | 202302 | [P2674R1] A trait for implicit lifetime types |
__cpp_lib_is_invocable | <type_traits> | 201703 | [P0604R0] Resolving GB 55, US 84, US 85, US 86 |
__cpp_lib_is_layout_compatible | <type_traits> | 201907 | [P0466R5] Layout-compatibility and Pointer-interconvertibility Traits |
__cpp_lib_is_nothrow_convertible | <type_traits> | 201806 | [P0758R1] Implicit conversion traits and utility functions [LWG3356] __cpp_lib_nothrow_convertible should be __cpp_lib_is_nothrow_convertible |
__cpp_lib_is_null_pointer | <type_traits> | 201309 | [LWG2247] Type traits and std::nullptr_t |
__cpp_lib_is_pointer_interconvertible | <type_traits> | 201907 | [P0466R5] Layout-compatibility and Pointer-interconvertibility Traits |
__cpp_lib_is_scoped_enum | <type_traits> | 202011 | [P1048R1] A proposal for a type trait to detect scoped enumerations |
__cpp_lib_is_swappable | <type_traits> | 201603 | [P0185R1] Adding [nothrow-]swappable traits, revision 3 |
__cpp_lib_is_within_lifetime | <type_traits> | 202306 | [P2641R4] Checking if a union alternative is active |
__cpp_lib_jthread | <stop_token> <thread> | 201907 | [P0660R10] Stop Token and Joining Thread |
201911 | [P1869R1] Rename ‘condition_variable_any’ interruptible wait methods | ||
__cpp_lib_latch | <latch> | 201907 | [P1135R6] The C++20 Synchronization Library |
__cpp_lib_launder | <new> | 201606 | [P0137R1] Core Issue 1776: Replacement of class objects containing reference members |
__cpp_lib_linalg | <linalg> | 202311 | [P1673R13] A free function linear algebra interface based on the BLAS |
__cpp_lib_list_remove_return_type | <forward_list> <list> | 201806 | [P0646R1] Improving the Return Value of Erase-Like Algorithms I: list/forward list |
__cpp_lib_logical_traits | <type_traits> | 201510 | [P0013R1] Logical Operator Type Traits (revison 1) |
__cpp_lib_make_from_tuple | <tuple> | 201606 | [P0209R2] make_from_tuple: apply for construction |
__cpp_lib_make_reverse_iterator | <iterator> | 201402 | [LWG2285] make_reverse_iterator |
__cpp_lib_make_unique | <memory> | 201304 | [N3656] make_unique (Revision 1) |
__cpp_lib_map_try_emplace | <map> | 201411 | [N4279]Improved insertion interface for unique-key maps (Revision 2.3) |
__cpp_lib_math_constants | <numbers> | 201907 | [P0631R8] Math Constants |
__cpp_lib_math_special_functions | <cmath> | 201603 | [P0226R1] Mathematical Special Functions for C++17, v5 |
__cpp_lib_mdspan | <mdspan> | 202207 | [P0009R18] MDSPAN [P2599R2] index _type & size_type in mdspan [P2604R0] MDSPAN: rename pointer and contiguous [P2613R1] Add the missingempty tomdspan |
__cpp_lib_memory_resource | <memory_resource> | 201603 | [P0220R1] Adopt Library Fundamentals V1 TS Components for C++17 (R1) |
__cpp_lib_modules | 202207 | [P2465R3] Standard Library Modules std and std.compat | |
__cpp_lib_monadic_optional | <optional> | 202110 | [P0798R8] Monadic operations for std::optional |
[LWG3621] Remove feature-test macro __cpp_lib_monadic_optional | |||
__cpp_lib_move_iterator_concept | <iterator> | 202207 | [P2520R0] move_iterator should be a random access iterator |
__cpp_lib_move_only_function | <functional> | 202110 | [P0288R9] move_only_function (was any_invocable) |
__cpp_lib_node_extract | <map> <set> <unordered_map> <unordered_set> | 201606 | [P0083R3] Splicing Maps and Sets (Revision 5) |
__cpp_lib_nonmember_container_access | <array> <deque> <forward_list> <iterator> <list> <map> <regex> <set> <string> <unordered_map> <unordered_set> <vector> | 201411 | [N4280]Non-member size() and more (Revison 2) |
__cpp_lib_not_fn | <functional> | 201603 | [P0005R4] Adoptnot_fn from Library Fundamentals 2 for C++17 |
202306 | [P2714R1] Bind front and back to NTTP callables | ||
__cpp_lib_null_iterators | <iterator> | 201304 | [N3644]Null Forward Iterators |
__cpp_lib_optional | <optional> | 201603 | [P0220R1] Adopt Library Fundamentals V1 TS Components for C++17 (R1) |
201606 | [P0032R3] Homogeneous interface for variant, any and optional (Revision 3) [P0307R2] Making Optional Greater Equal Again | ||
202106 | [P2231R1] Add further constexpr support for optional/variant | ||
202110 | [P0798R8] Monadic operations for std::optional [LWG3621] Remove feature-test macro __cpp_lib_monadic_optional | ||
__cpp_lib_out_ptr | <memory> | 202106 | [P1132R7] out_ptr - a scalable output pointer abstraction |
202311 | [P2833R2] Freestanding Library: inout expected span | ||
__cpp_lib_parallel_algorithm | <algorithm> <numeric> | 201603 | [P0024R2] The Parallelism TS Should be Standardized |
__cpp_lib_polymorphic_allocator | <memory_resource> | 201902 | [P0339R6] polymorphic_allocator<> as a vocabulary type [LWG3437] __cpp_lib_polymorphic_allocator is in the wrong header |
__cpp_lib_print | <ostream> <print> | 202207 | [P2093R14] Formatted output |
202403 | [P3107R5] Permit an efficient implementation of std::print | ||
__cpp_lib_quoted_string_io | <iomanip> | 201304 | [N3654]Quoted Strings Library Proposal (Revision 2) |
__cpp_lib_ranges | <algorithm> <functional> <iterator> <memory> <ranges> | 201811 | [P0896R4] The One Ranges Proposal |
201907 | [P1035R7] Input Range Adaptors | ||
201911 | [P1716R3] ranges compare algorithm are over-constrained | ||
202106 | [P2325R3] Views should not be required to be default constructible | ||
202110 | [P2415R2] What is a view? | ||
202202 | [P2387R3] Pipe support for user-defined range adaptors | ||
202207 | [P2494R2] Relaxing range adaptors to allow for move only types | ||
202211 | [P2602R2] Poison Pills are Too Toxic | ||
202302 | [P2609R3] Relaxing Ranges Just A Smidge | ||
__cpp_lib_ranges_as_const | <ranges> | 202207 | [P2278R4] cbegin should always return a constant iterator |
202311 | [P2836R1] std::basic_const_iterator should follow its underlying type’s convertibility | ||
__cpp_lib_ranges_as_rvalue | <ranges> | 202207 | [P2446R2] views::as_rvalue |
__cpp_lib_ranges_cartesian_product | <ranges> | 202207 | [P2374R4] views::cartesian_product[P2540R1] Empty Product for certain Views |
__cpp_lib_ranges_chunk | <ranges> | 202202 | [P2442R1] Windowing range adaptors: views::chunk and views::slide |
__cpp_lib_ranges_chunk_by | <ranges> | 202202 | [P2443R1] views::chunk_by |
__cpp_lib_ranges_concat | <ranges> | 202403 | [P2542R8] views::concat |
__cpp_lib_ranges_contains | <algorithm> | 202207 | [P2302R4] std::ranges::contains |
__cpp_lib_ranges_enumerate | <ranges> | 202302 | [P2164R9] views::enumerate |
__cpp_lib_ranges_find_last | <algorithm> | 202207 | [P1223R5] find_last [LWG3807] The feature test macro for ranges::find_last should be renamed |
__cpp_lib_ranges_fold | <algorithm> | 202207 | [P2322R6] ranges::fold |
__cpp_lib_ranges_iota | <numeric> | 202202 | [P2440R1] ranges::iota, ranges::shift_left, and ranges::shift_right |
__cpp_lib_ranges_join_with | <ranges> | 202202 | [P2441R2] views::join_with |
__cpp_lib_ranges_repeat | <ranges> | 202207 | [P2474R2] views::repeat |
__cpp_lib_ranges_slide | <ranges> | 202202 | [P2442R1] Windowing range adaptors: views::chunk and views::slide |
__cpp_lib_ranges_starts_ends_with | <algorithm> | 202106 | [P1659R3] starts_with and ends_with |
__cpp_lib_ranges_stride | <ranges> | 202207 | [P1899R3] stride_view |
__cpp_lib_ranges_to_container | <ranges> | 202202 | [P1206R7] Conversions from ranges to containers |
__cpp_lib_ranges_zip | <ranges> <tuple> <utility> | 202110 | [P2321R2] zip |
__cpp_lib_ratio | <ratio> | 202306 | [P2734R0] Adding the new 2022 SI prefixes |
__cpp_lib_raw_memory_algorithms | <memory> | 201606 | [P0040R3] Extending memory management tools |
__cpp_lib_rcu | <rcu> | 202306 | [P2545R4] Read-Copy Update (RCU) |
__cpp_lib_reference_from_temporary | <type_traits> | 202202 | [P2255R2] A type trait to detect reference binding to temporary |
__cpp_lib_reference_wrapper | <functional> | 202403 | [P2944R3] Comparisons for reference_wrapper |
__cpp_lib_remove_cvref | <type_traits> | 201711 | [P0550R2] Transformation Trait remove_cvref |
__cpp_lib_result_of_sfinae | <functional> <type_traits> | 201210 | [N3462] std::result_of and SFINAE |
__cpp_lib_robust_nonmodifying_seq_ops | <algorithm> | 201304 | [N3671]Making non-modifying sequence operations more robust: Revision 2 |
__cpp_lib_sample | <algorithm> | 201603 | [P0220R1] Adopt Library Fundamentals V1 TS Components for C++17 (R1) |
__cpp_lib_saturation_arithmetic | <numeric> | 202311 | [P0543R3] Saturation arithmetic |
__cpp_lib_scoped_lock | <mutex> | 201703 | [P0156R2] Variadiclock_guard (Rev. 4) |
__cpp_lib_semaphore | <semaphore> | 201907 | [P1135R6] The C++20 Synchronization Library |
__cpp_lib_shared_mutex | <shared_mutex> | 201505 | [N4508] A proposal to add shared_mutex (untimed) (Revision 4) |
__cpp_lib_shared_ptr_arrays | <memory> | 201611 | [P0497R0] Fixes to shared_ptr support for arrays |
201707 | [P0674R1] Extending make_shared to Support Arrays | ||
__cpp_lib_shared_ptr_weak_type | <memory> | 201606 | [P0163R0] shared_ptr::weak_type |
__cpp_lib_shared_timed_mutex | <shared_mutex> | 201402 | [N3891] A proposal to rename shared_mutex toshared_timed_mutex |
__cpp_lib_shift | <algorithm> | 201806 | [P0769R2] Add shift to <algorithm> |
202202 | [P2440R1] ranges::iota, ranges::shift_left, and ranges::shift_right | ||
__cpp_lib_smart_pointer_owner_equality | <memory> | 202306 | [P1901R2] Enabling the Use of weak_ptr as Keys in Unordered Associative Containers |
__cpp_lib_smart_ptr_for_overwrite | <memory> | 202002 | [P1020R1] Smart pointer creation with default initialization [P1973R1] Rename _default_init functions (NB Comment DE002) |
__cpp_lib_source_location | <source_location> | 201907 | [P1208R6] Adopt source location from Library Fundamentals V3 for C++20 |
__cpp_lib_span | <span> | 201803 | [P0122R7] span: bounds-safe views for sequences of objects [LWG3274] Missing feature test macro for<span> |
201902 | [P1024R3] Usability Enhancements forstd::span | ||
202002 | [P1976R2] Fixed-sizespan construction from dynamic range | ||
202311 | [P2821R5] span.at() [P2833R2] Freestanding Library: inout expected span | ||
__cpp_lib_span_initializer_list | <span> | 202311 | [P2447R6] std::span over an initializer list |
__cpp_lib_spanstream | <spanstream> | 202106 | [P0448R4] A strstream replacement using span as buffer |
__cpp_lib_ssize | <iterator> | 201902 | [P1227R2] Signed ssize() functions, unsigned size() functions |
__cpp_lib_sstream_from_string_view | <sstream> | 202306 | [P2495R3] Interfacing stringstreams with string_view |
__cpp_lib_stacktrace | <stacktrace> | 202011 | [P0881R7] A Proposal to add stacktrace library |
__cpp_lib_start_lifetime_as | <memory> | 202207 | [P2590R2] Explicit lifetime management |
__cpp_lib_starts_ends_with | <string> <string_view> | 201711 | [P0457R2] String Prefix and Suffix Checking |
__cpp_lib_stdatomic_h | <stdatomic.h> | 202011 | [P0943R6] Support C atomics in C++ |
__cpp_lib_string_contains | <string> <string_view> | 202011 | [P1679R3] String Contains function |
__cpp_lib_string_resize_and_overwrite | <string> | 202110 | [P1072R10]basic_string::resize_and_overwrite |
__cpp_lib_string_udls | <string> | 201304 | [N3642]User-defined Literals for Standard Library Types (part 1 - version 4) |
__cpp_lib_string_view | <string> <string_view> | 201603 | [P0220R1] Adopt Library Fundamentals V1 TS Components for C++17 (R1) |
201606 | [P0254R2] Integrating std::string_viewandstd::string | ||
201803 | [P0858R0] Constexpr iterator requirements[LWG3257] Missing feature testing macro update from P0858 | ||
202403 | [P2591R5] Concatenation of strings and string views | ||
__cpp_lib_submdspan | <mdspan> | 202306 | [P2630R4] Submdspan |
202403 | [P2642R6] Padded mdspan layouts | ||
__cpp_lib_syncbuf | <syncstream> | 201711 | [P0053R7] C++ Synchronized Buffered Ostream |
201803 | [P0753R2] Manipulators for C++ Synchronized Buffered Ostream | ||
__cpp_lib_text_encoding | <text_encoding> | 202306 | [P1885R12] Naming Text Encodings to Demystify Them |
__cpp_lib_three_way_comparison | <compare> | 201711 | [P0768R1] Library Support for the Spaceship (Comparison) Operator |
201907 | [P1614R2] The Mothership Has Landed: Adding<=> to the Library | ||
__cpp_lib_to_address | <memory> | 201711 | [P0653R2] Utility to convert a pointer to a raw pointer |
__cpp_lib_to_array | <array> | 201907 | [P0325R4] to_array from LFTS with updates |
__cpp_lib_to_chars | <charconv> | 201611 | [P0067R5] Elementary string conversions, revision 5 [P0682R1] Repairing elementary string conversions [LWG3137] Header for__cpp_lib_to_chars |
202306 | [P2497R0] Testing for success or failure of charconv functions | ||
__cpp_lib_to_string | <string> | 202306 | [P2587R3] to_string or not to_string |
__cpp_lib_to_underlying | <utility> | 202102 | [P1682R2] std::to_underlying |
__cpp_lib_transformation_trait_aliases | <type_traits> | 201304 | [N3655]TransformationTraits Redux, v2 |
__cpp_lib_transparent_operators | <functional> <memory> | 201210 | [N3421]Making Operator Functors greater<> |
201510 | [P0074R0] Making std::owner_lessmore flexible | ||
__cpp_lib_tuple_element_t | <tuple> | 201402 | [N3887]Consistent Metafunction Aliases |
__cpp_lib_tuple_like | <map> <tuple> <unordered_map> <utility> | 202207 | [P2165R4] Compatibility between tuple, pair and tuple-like objects |
202311 | [P2819R2] Add tuple protocol to complex | ||
__cpp_lib_tuples_by_type | <tuple> <utility> | 201304 | [N3670]Wording for Addressing Tuples by Type: Revision 2 |
__cpp_lib_type_identity | <type_traits> | 201806 | [P0887R1] The identity metafunction |
__cpp_lib_type_trait_variable_templates | <type_traits> | 201510 | [P0006R0] Adopt Type Traits Variable Templates from Library Fundamentals TS for C++17 |
__cpp_lib_uncaught_exceptions | <exception> | 201411 | [N4259]Wording for std::uncaught_exceptions |
__cpp_lib_unordered_map_try_emplace | <unordered_map> | 201411 | [N4279]Improved insertion interface for unique-key maps (Revision 2.3) |
__cpp_lib_unreachable | <utility> | 202202 | [P0627R6] Function to mark unreachable code |
__cpp_lib_unwrap_ref | <type_traits> | 201811 | [P0318R1] unwrap_ref_decay and unwrap_reference [LWG3348] __cpp_lib_unwrap_ref in wrong header |
__cpp_lib_variant | <variant> | 201606 | [P0088R3] Variant: a type-safe union for C++17 (v8) [P0393R3] Making Variant Greater Equal[P0032R3] Homogeneous interface for variant, any and optional (Revision 3) |
202102 | [P2162R2] Inheriting from std::variant (resolving LWG3052) | ||
202106 | [P2231R1] Add further constexpr support for optional/variant | ||
202306 | [P2637R3] Member visit | ||
__cpp_lib_void_t | <type_traits> | 201411 | [N3911]TransformationTrait Alias void_t |
References
[CWG2615] S. B. Tam. 2022-08-17. Missing __has_cpp_attribute(assume).
[CWG2659] CWG. 2022-12-02. Missing feature-test macro for lifetime extension in range-for loop.
[LWG2112] Daniel Krügler. User-defined classes that cannot be derived from.
[LWG2247] Joe Gottman. Type traits and std::nullptr_t.
[LWG2285] Zhihao Yuan. make_reverse_iterator.
[LWG2296] Daryle Walker. std::addressof should be constexpr.
[LWG2911] United States. An is_aggregate type trait is needed.
[LWG3137] S. B. Tam. Header for __cpp_lib_to_chars.
[LWG3256] Antony Polukhin. Feature testing macro for constexpr algorithms.
[LWG3257] Antony Polukhin. Missing feature testing macro update from P0858.
[LWG3274] Jonathan Wakely. Missing feature test macro for .
[LWG3348] Barry Revzin. __cpp_lib_unwrap_ref in wrong header.
[LWG3356] Barry Revzin. __cpp_lib_nothrow_convertible should be __cpp_lib_is_nothrow_convertible.
[LWG3393] Barry Revzin. Missing/incorrect feature test macro for coroutines.
[LWG3437] Jonathan Wakely. __cpp_lib_polymorphic_allocator is in the wrong header.
[LWG3621] Jens Maurer. Remove feature-test macro __cpp_lib_monadic_optional.
[LWG3750] Barry Revzin. Too many papers bump __cpp_lib_format.
[LWG3751] Barry Revzin. Missing feature macro for flat_set.
[LWG3792] Marc Mutz. __cpp_lib_constexpr_algorithms should also be defined in .
[LWG3807] Daniel Marshall. The feature test macro for ranges::find_last should be renamed.
[LWG3887] Alisdair Meredith. Version macro for allocate_at_least.
[N1720] R. Klarer, J. Maddock, B. Dawes, H. Hinnant. 2004-10-20. Proposal to Add Static Assertions to the Core Language (Revision 3).
[N1986] H. Sutter, F. Glassborow. 2006-04-06. Delegating Constructors (revision 3).
[N2118] Howard E. Hinnant. 2006-10-19. A Proposal to Add an Rvalue Reference to the C++ Language: Proposed Wording: Revision 3.
[N2235] G. Dos Reis, B. Stroustrup, J. Maurer. 2007-04-17. Generalized Constant Expressions—Revision 5.
[N2242] D. Gregor, J. Järvi, J. Maurer, J. Merrill. 2007-04-19. Proposed Wording for Variadic Templates (Revision 2).
[N2249] Lawrence Crowl. 2007-04-19. New Character Types in C++.
[N2258] G. Dos Reis, B. Stroustrup. 2007-04-19. Templates Aliases.
[N2343] J. Järvi, B. Stroustrup, G. Dos Reis. 2007-07-18. Decltype (revision 7): proposed wording.
[N2439] Bronek Kozicki. 2007-10-05. Extending move semantics to *this (revised wording).
[N2442] L. Crowl, B. Dawes. 2007-10-05. Raw and Unicode String Literals; Unified Proposal (Rev. 2).
[N2540] A. Meredith, M. Wong, J. Maurer. 2008-02-29. Inheriting Constructors (revision 5).
[N2660] Lawrence Crowl. 2008-06-13. Dynamic Initialization and Destruction with Concurrency.
[N2672] J. Merrill, D. Vandevoorde. 2008-06-12. Initializer List proposed wording.
[N2756] M. Spertus, B. Seymour. 2008-09-16. Non-static data member initializers.
[N2761] J. Maurer, M. Wong. 2008-09-18. Towards support for attributes in C++ (Revision 6).
[N2765] I. McIntosh, M. Wong, R. Mak, R. Klarer, et al. 2008-09-18. User-defined Literals (aka. Extensible Literals (revision 5)).
[N2782] P. McKenney, L. Crowl. 2008-09-18. C++ Data-Dependency Ordering: Function Annotation.
[N2927] Daveed Vandevoorde. 2009-07-15. New wording for C++0x Lambdas (rev. 2).
[N2930] D. Gregor, B. Dawes. 2009-07-16. Range-Based For Loop Wording (Without Concepts).
[N3421] Stephan T. Lavavej. 2012-09-20. Making Operator Functors greater<>.
[N3462] E. Niebler, D. Walker, J. de Guzman. 2012-10-18. std::result_of and SFINAE.
[N3472] James Dennett. 2012-10-19. Binary Literals in the C++ Core Language.
[N3545] Walter E. Brown. 2013-03-12. An Incremental Improvement to integral_constant.
[N3638] Jason Merrill. 2013-04-17. Return type deduction for normal functions.
[N3642] Peter Sommerlad. 2013-04-18. User-defined Literals for Standard Library Types (part 1 - version 4).
[N3644] Alan Talbot. 2013-04-18. Null Forward Iterators.
[N3648] D. Vandevoorde, V. Voutilainen. 2013-04-17. Wording Changes for Generalized Lambda-capture.
[N3649] F. Vali, H. Sutter, D. Abrahams. 2013-04-19. Generic (Polymorphic) Lambda Expressions (Revision 3).
[N3651] Gabriel Dos Reis. 2013-04-19. Variable Templates (Revision 1).
[N3652] Richard Smith. 2013-04-18. Relaxing constraints on constexpr functions / constexpr member functions and implicit const.
[N3653] V. Voutilainen, R. Smith. 2013-04-17. Member initializers and aggregates.
[N3654] Beman Dawes. 2013-04-19. Quoted Strings Library Proposal (Revision 2).
[N3655] Walter E. Brown. 2013-04-18. TransformationTraits Redux, v2.
[N3656] Stephan T. Lavavej. 2013-04-18. make_unique (Revision 1).
[N3657] J. Wakely, S. Lavavej, J. Muñoz. 2013-03-19. Adding heterogeneous comparison lookup to associative containers (rev 4).
[N3658] Jonathan Wakely. 2013-04-18. Compile-time integer sequences.
[N3668] Jeffrey Yasskin. 2013-04-19. exchange() utility function, revision 3.
[N3670] Mike Spertus. 2013-04-19. Wording for Addressing Tuples by Type: Revision 2.
[N3671] M. Spertus, A. Pall. 2013-04-19. Making non-modifying sequence operations more robust: Revision 2.
[N3760] Alberto Ganesh Barbati. 2013-09-01. [[deprecated]] attribute.
[N3778] Lawrence Crowl. 2013-09-27. C++ Sized Deallocation.
[N3779] Peter Sommerlad. 2013-09-24. User-defined Literals for std::complex.
[N3887] Michael Park. 2013-12-26. Consistent Metafunction Aliases.
[N3891] G. Nishanov, H. Sutter. 2014-01-14. A proposal to rename shared_mutex to shared_timed_mutex.
[N3911] Walter E. Brown. 2014-02-23. TransformationTrait Alias void_t.
[N3928] Walter E. Brown. 2014-02-14. Extending static_assert, v2.
[N4169] Tomasz Kamiński. 2014-08-22. A proposal to add invoke function template (Revision 1).
[N4258] Nicolai Josuttis. 2014-11-07. Cleaning up noexcept in the Library (Rev 3).
[N4259] Herb Sutter. 2014-11-06. Wording for std::uncaught_exceptions.
[N4266] Richard Smith. 2014-11-05. Attributes for namespaces and enumerators.
[N4268] Richard Smith. 2014-11-05. Allow constant evaluation for all non-type template arguments.
[N4279] Thomas Köpp. 2014-11-07. Improved insertion interface for unique-key maps (Revision 2.3).
[N4280] Riccardo Marcangelo. 2014-11-06. Non-member size() and more (Revison 2).
[N4295] Andrew Sutton, Richard Smith. 2014-11-07. Folding Expressions.
[N4389] Zhihao Yuan. 2015-02-23. Wording for bool_constant, revision 1.
[N4508] Gor Nishanov. 2015-05-05. A proposal to add shared_mutex (untimed) (Revision 4).
[N4510] Zhihao Yuan. 2015-05-05. Minimal incomplete type support for standard containers, revision 4.
[P0005R4] Alisdair Meredith. 2016-03-01. Adopt not_fn from Library Fundamentals 2 for C++17.
[P0006R0] Alisdair Meredith. 2015-09-28. Adopt Type Traits Variable Templates from Library Fundamentals TS for C++17.
[P0007R1] ADAM David Alan Martin, Alisdair Meredith. 2015-10-22. Constant View: A proposal for a std::as_const helper function template.
[P0009R18] Christian Trott, D.S. Hollman, Damien Lebrun-Grandie, Mark Hoemmen, Daniel Sunderland, H. Carter Edwards, Bryce Adelstein Lelbach, Mauro Bianco, Ben Sander, Athanasios Iliopoulos, John Michopoulos, Nevin Liber. 2022-07-13. MDSPAN.
[P0012R1] Jens Maurer. 2015-10-22. Make exception specifications be part of the type system, version 5.
[P0013R1] Jonathan Wakely. 2015-10-23. Logical Operator Type Traits (revison 1).
[P0017R1] Oleg Smolsky. 2015-10-24. Extension to aggregate initialization.
[P0018R3] H. Carter Edwards, Daveed Vandevoorde, Christian Trott, Hal Finkel, Jim Reus, Robin Maffeo, Ben Sander. 2016-03-04. Lambda Capture of *this by Value as [=,*this].
[P0019R8] Daniel Sunderland, H. Carter Edwards, Hans Boehm, Olivier Giroux, Mark Hoemmen, D. S. Hollman, Bryce Adelstein Lelbach, Jens Maurer. 2018-06-07. Atomic Ref.
[P0020R6] H. Carter Edwards, Hans Boehm, Olivier Giroux, JF Bastien, James Reus. 2017-11-10. Floating Point Atomic.
[P0024R2] Jared Hoberock. 2016-03-04. The Parallelism TS Should be Standardized.
[P0025R0] Martin Moene, Niels Dekker. 2015-09-18. An algorithm to“clamp” a value between a pair of boundary values.
[P0030R1] Benson Ma. 2015-11-06. Proposal to Introduce a 3-Argument Overload to std::hypot.
[P0031R0] Antony Polukhin. 2015-09-09. A Proposal to Add Constexpr Modifiers to reverse_iterator, move_iterator, array and Range Access.
[P0032R3] Vicente J. Botet Escriba. 2016-05-24. Homogeneous interface for variant, any and optional (Revision 3).
[P0033R1] Jonathan Wakely, Peter Dimov. 2015-10-24. Re-enabling shared_from_this (revision 1).
[P0035R4] Clark Nelson. 2016-06-21. Dynamic memory allocation for over-aligned data.
[P0036R0] Thibaut Le Jehan. 2015-09-10. Unary Folds and Empty Parameter Packs (Revision 1).
[P0040R3] Brent Friedman. 2016-06-24. Extending memory management tools.
[P0053R7] Lawrence Crowl, Peter Sommerlad, Nicolai Josuttis, Pablo Halpern. 2017-11-07. C++ Synchronized Buffered Ostream.
[P0067R5] Jens Maurer. 2016-11-11. Elementary string conversions, revision 5.
[P0074R0] Jonathan Wakely. 2015-09-23. Making std::owner_less more flexible.
[P0083R3] Alan Talbot, Jonathan Wakely, Howard Hinnant, James Dennett. 2016-06-24. Splicing Maps and Sets (Revision 5).
[P0088R3] Axel Naumann. 2016-06-23. Variant: a type-safe union for C++17 (v8).
[P0091R3] Mike Spertus, Faisal Vali, Richard Smith. 2016-06-24. Template argument deduction for class templates (Rev. 6).
[P0092R1] Howard Hinnant. 2015-10-20. Polishing.
[P0122R7] Neil MacIntosh, Stephan T. Lavavej. 2018-03-16. span: bounds-safe views for sequences of objects.
[P0127R2] James Touton, Mike Spertus. 2016-06-23. Declaring non-type template arguments with auto.
[P0135R1] Richard Smith. 2016-06-20. Wording for guaranteed copy elision through simplified value categories.
[P0136R1] Richard Smith. 2015-10-19. Rewording inheriting constructors (core issue 1941 et al).
[P0137R1] Richard Smith. 2016-06-23. Core Issue 1776: Replacement of class objects containing reference members.
[P0152R1] Olivier Giroux, JF Bastien, Jeff Snyder. 2016-03-02. constexpr atomic::is_always_lock_free.
[P0154R1] JF Bastien, Olivier Giroux. 2016-03-03. constexpr std::thread::hardware_{true,false}_sharing_size.
[P0156R2] Mike Spertus. 2017-03-03. Variadic lock_guard (Rev. 4).
[P0163R0] Arthur O’Dwyer. 2015-10-23. shared_ptr::weak_type.
[P0170R1] Faisal Vali. 2016-03-01. Wording for Constexpr Lambda.
[P0184R0] Eric Niebler. 2016-02-11. Generalizing the Range-Based For Loop.
[P0185R1] Daniel Krugler. 2016-03-01. Adding [nothrow-]swappable traits, revision 3.
[P0188R1] Andrew Tomazos. 2016-02-29. Wording for [[fallthrough]] attribute.
[P0189R1] Andrew Tomazos. 2016-02-29. Wording for [[nodiscard]] attribute.
[P0195R2] Robert Haberlach, Richard Smith. 2016-11-08. Pack expansions in using-declarations.
[P0202R3] Antony Polukhin. 2017-11-09. Add Constexpr Modifiers to Functions in and Headers.
[P0209R2] Pablo Halpern. 2016-06-23. make_from_tuple: apply for construction.
[P0212R1] Andrew Tomazos. 2016-03-01. Wording for [[maybe_unused]] attribute.
[P0217R3] Jens Maurer. 2016-06-24. Proposed wording for structured bindings.
[P0218R1] Beman Dawes. 2016-03-05. Adopt File System TS for C++17.
[P0219R1] Beman Dawes. 2016-06-24. Relative Paths for Filesystem.
[P0220R1] Beman Dawes. 2016-03-03. Adopt Library Fundamentals V1 TS Components for C++17 (R1).
[P0226R1] Walter E. Brown, Axel Naumann, Edward Smith-Rowland. 2016-02-29. Mathematical Special Functions for C++17, v5.
[P0245R1] Thomas Koeppe. 2016-03-04. Hexadecimal float literals for C++.
[P0254R2] Marshall Clow. 2016-06-24. Integrating std::string_view and std::string.
[P0258R2] Michael Spencer. 2016-06-24. has_unique_object_representations - wording.
[P0288R9] Matt Calabrese, Ryan McDougall. 2021-08-27. move_only_function (was any_invocable).
[P0292R2] Jens Maurer. 2016-06-20. constexpr if: A slightly different syntax.
[P0295R0] Walter E. Brown. 2016-03-01. Adopt Selected Library Fundamentals V2 Components for C++17.
[P0298R3] Neil MacIntosh. 2017-03-03. A byte type definition.
[P0307R2] Tony Van Eerd. 2016-03-15. Making Optional Greater Equal Again.
[P0317R1] Beman Dawes. 2016-10-15. Directory Entry Caching for Filesystem.
[P0318R1] Vicente J. Botet Escribá. 2018-03-30. unwrap_ref_decay and unwrap_reference.
[P0323R12] Vicente Botet, JF Bastien, Jonathan Wakely. 2022-01-07. std::expected.
[P0325R4] Zhihao Yuan. 2019-07-29. to_array from LFTS with updates.
[P0329R4] Tim Shen, Richard Smith. 2017-07-12. Designated Initialization Wording.
[P0330R8] JeanHeyd Meneide, Rein Halbersma. 2020-01-11. Literal Suffixes for (signed) size_t.
[P0339R6] Pablo Halpern, Dietmar Kühl. 2019-02-22. polymorphic_allocator<> as a vocabulary type.
[P0355R7] Howard E. Hinnant, Tomasz Kamiński. 2018-03-16. Extending to Calendars and Time Zones.
[P0356R5] Tomasz Kamiński. 2018-11-09. Simplified partial function application.
[P0386R2] Hal Finkel, Richard Smith. 2016-06-24. Inline Variables.
[P0392R0] Nicolai Josuttis. 2016-06-23. Adapting string_view by filesystem paths.
[P0393R3] Tony Van Eerd. 2016-06-21. Making Variant Greater Equal.
[P0401R6] Chris Kennelly, Jonathan Wakely. 2021-02-15. Providing size feedback in the Allocator interface.
[P0415R1] Antony Polukhin. 2016-11-10. Constexpr for std::complex.
[P0426R1] Antony Polukhin. 2016-11-08. Constexpr for std::char_traits.
[P0428R2] Louis Dionne. 2017-07-13. Familiar template syntax for generic lambdas.
[P0429R9] Zach Laine. 2022-06-17. A Standard flat_map.
[P0433R2] Mike Spertus, Walter E. Brown, Stephan T. Lavavej. 2017-03-03. Toward a resolution of US7 and US14: Integrating template deduction for class templates into the standard library.
[P0448R4] Peter Sommerlad. 2021-03-01. A strstream replacement using span as buffer.
[P0457R2] Mikhail Maltsev. 2017-11-11. String Prefix and Suffix Checking.
[P0463R1] Howard Hinnant. 2017-07-13. endian, Just endian.
[P0466R5] Lisa Lippincott. 2019-07-26. Layout-compatibility and Pointer-interconvertibility Traits.
[P0476R2] JF Bastien. 2017-11-10. Bit-casting object representations.
[P0479R5] Clay Trychta. 2018-03-16. Proposed wording for likely and unlikely attributes.
[P0482R6] Tom Honermann. 2018-11-09. char8_t: A type for UTF-8 characters and strings (Revision 6).
[P0493R5] Al Grant, Al Grant, Bronek Kozicki, Tim Northover. 2024-02-12. Atomic maximum/minimum.
[P0497R0] Jonathan Wakely. 2016-11-10. Fixes to shared_ptr support for arrays.
[P0505R0] Howard Hinnant. 2016-11-09. Wording for GB 50.
[P0512R0] Mike Spertus, Richard Smith, Faisal Vali. 2016-11-10. Class Template Argument Deduction Assorted NB resolution and issues.
[P0515R3] Herb Sutter, Jens Maurer, Walter E. Brown. 2017-11-10. Consistent comparison.
[P0522R0] James Touton, Hubert Tong. 2016-11-11. DR: Matching of template template-arguments excludes compatible templates.
[P0533R9] Oliver Rosten, Edward Rosten. 2021-11-12. constexpr for cmath and cstdlib.
[P0543R3] Jens Maurer. 2023-07-19. Saturation arithmetic.
[P0550R2] Walter E. Brown. 2017-07-17. Transformation Trait remove_cvref.
[P0553R4] Jens Maurer. 2019-03-01. Bit operations.
[P0556R3] Jens Maurer. 2018-06-06. Integral power-of-2 operations.
[P0586R2] Federico Kircheis. 2020-02-12. Safe integral comparisons.
[P0595R2] Richard Smith, Andrew Sutton, Daveed Vandevoorde. 2018-11-09. std::is_constant_evaluated.
[P0604R0] Daniel Krugler, Pablo Halpern, Jonathan Wakely. 2017-03-03. Resolving GB 55, US 84, US 85, US 86.
[P0609R3] Aaron Ballman. 2024-03-21. Attributes for Structured Bindings.
[P0620R0] Jason Merrill. 2017-03-02. Drafting for class template argument deduction issues.
[P0627R6] Jens Maurer. 2021-10-25. Function to mark unreachable code.
[P0631R8] Lev Minkovsky, John McFarlane. 2019-07-28. Math Constants.
[P0645R10] Victor Zverovich. 2019-07-18. Text Formatting.
[P0646R1] Marc Mutz. 2018-06-08. Improving the Return Value of Erase-Like Algorithms I: list/forward list.
[P0653R2] Glen Joseph Fernandes. 2017-11-09. Utility to convert a pointer to a raw pointer.
[P0660R10] Nicolai Josuttis, Lewis Baker, Billy O’Neal, Herb Sutter, Anthony Williams. 2019-07-21. Stop Token and Joining Thread.
[P0674R1] Peter Dimov, Glen Fernandes. 2017-07-12. Extending make_shared to Support Arrays.
[P0682R1] Jens Maurer. 2017-07-12. Repairing elementary string conversions.
[P0718R2] Alisdair Meredith. 2017-11-10. Revising atomic_shared_ptr for C++20.
[P0722R3] Richard Smith, Andrew Hunter. 2018-03-17. Efficient sized delete for variable sized classes.
[P0732R2] Jeff Snyder, Louis Dionne. 2018-06-06. Class Types in Non-Type Template Parameters.
[P0734R0] Andrew Sutton. 2017-07-14. Wording Paper, C++ extensions for Concepts.
[P0753R2] Peter Sommerlad, Pablo Halpern. 2018-03-16. Manipulators for C++ Synchronized Buffered Ostream.
[P0754R2] Alan Talbot. 2018-03-13. .
[P0758R1] Daniel Krügler. 2018-06-06. Implicit conversion traits and utility functions.
[P0768R1] Walter E. Brown. 2017-11-10. Library Support for the Spaceship (Comparison) Operator.
[P0769R2] Dan Raviv. 2018-06-06. Add shift to .
[P0780R2] Barry Revzin. 2018-03-14. Allow pack expansion in lambda init-capture.
[P0784R7] Daveed Vandevoorde, Peter Dimov,Louis Dionne, Nina Ranns, Richard Smith, Daveed Vandevoorde. 2019-07-22. More constexpr containers.
[P0792R14] Vittorio Romeo, Zhihao Yuan, Jarrad Waterloo. 2023-02-09. function_ref: a non-owning reference to a Callable.
[P0798R8] Sy Brand. 2021-10-15. Monadic operations for std::optional.
[P0811R3] S. Davis Herring. 2019-02-22. Well-behaved interpolation for numbers and pointers.
[P0840R2] Richard Smith. 2018-03-12. Language support for empty objects.
[P0847R7] Barry Revzin, Gašper Ažman, Sy Brand, Ben Deane. 2021-07-14. Deducing this.
[P0848R3] Barry Revzin, Casey Carter. 2019-07-28. Conditionally Trivial Special Member Functions.
[P0858R0] Antony Polukhin. 2017-11-11. Constexpr iterator requirements.
[P0859R0] Richard Smith. 2017-11-09. Core Issue 1581: When are constexpr member functions defined?
[P0879R0] Antony Polukhin. 2017-12-29. Constexpr for swap and swap related functions.
[P0881R7] Antony Polukhin, Alexey Gorgurov. 2020-09-16. A Proposal to add stacktrace library.
[P0883R2] Nicolai Josuttis. 2019-11-08. Fixing Atomic Initialization.
[P0887R1] Timur Doumler. 2018-03-18. The identity metafunction.
[P0892R2] Barry Revzin, Stephan T. Lavavej. 2018-06-08. explicit(bool).
[P0896R4] Eric Niebler, Casey Carter, Christopher Di Bella. 2018-11-09. The One Ranges Proposal.
[P0898R3] Casey Carter, Eric Niebler. 2018-06-08. Standard Library Concepts.
[P0912R5] Gor Nishanov. 2019-02-22. Merge Coroutines TS into C++20 working draft.
[P0919R3] Mateusz Pusz. 2018-11-09. Heterogeneous lookup for unordered containers.
[P0920R2] Mateusz Pusz. 2019-02-22. Precalculated hash values in lookup.
[P0943R6] Hans Boehm. 2020-11-15. Support C atomics in C++.
[P0960R3] Ville Voutilainen, Thomas Köppe. 2019-02-22. Allow initializing aggregates from a parenthesized list of values.
[P0980R1] Louis Dionne. 2019-07-19. Making std::string constexpr.
[P1001R2] Alisdair Meredith, Pablo Halpern. 2019-02-22. Target Vectorization Policies from Parallelism V2 TS to C++20.
[P1002R1] Louis Dionne. 2018-11-10. Try-catch blocks in constexpr functions.
[P1004R2] Louis Dionne. 2019-07-19. Making std::vector constexpr.
[P1006R1] Louis Dionne. 2018-10-07. Constexpr in std::pointer_traits.
[P1007R3] Timur Doumler, Chandler Carruth. 2018-11-07. std::assume_aligned.
[P1020R1] Glen Joseph Fernandes, Peter Dimov. 2018-11-06. Smart pointer creation with default initialization.
[P1023R0] Tristan Brindle. 2018-05-06. constexpr comparison operators for std::array.
[P1024R3] Tristan Brindle. 2019-02-22. Usability Enhancements for std::span.
[P1032R1] Antony Polukhin. 2018-10-01. Misc constexpr bits.
[P1035R7] Christopher Di Bella, Casey Carter, Corentin Jabot. 2019-08-02. Input Range Adaptors.
[P1048R1] Juan Alday. 2020-10-16. A proposal for a type trait to detect scoped enumerations.
[P1064R0] Peter Dimov, Vassil Vassilev. 2018-05-04. Allowing Virtual Function Calls in Constant Expressions.
[P1065R2] Barry Revzin, Tomasz Kaminski. 2019-07-28. constexpr INVOKE.
[P1068R11] Ilya Burylov, Pavel Dyakov, Ruslan Arutyunyan, Andrey Nikolaev, Alina Elizarova. 2024-04-02. Vector API for random number generation.
[P1072R10] Chris Kennelly, Mark Zeren. 2021-09-15. basic_string::resize_and_overwrite.
[P1073R3] Richard Smith, Andrew Sutton, Daveed Vandevoorde. 2018-11-06. Immediate functions.
[P1084R2] Walter E. Brown, Casey Carter. 2018-11-06. Today’s return-type-requirements Are Insufficient.
[P1099R5] Gašper Ažman, Jonathan Mueller. 2019-07-20. Using Enum.
[P1103R3] Richard Smith. 2019-02-22. Merging Modules.
[P1115R3] Marc Mutz. 2019-11-25. Improving the Return Value of Erase-Like Algorithms II: Free erase/erase if.
[P1132R7] JeanHeyd Meneide, Todor Buyukliev, Isabella Muerte. 2021-04-16. out_ptr - a scalable output pointer abstraction.
[P1135R6] David Olsen, Olivier Giroux, JF Bastien, Detlef Vollmann, Bryce Lelbach. 2019-07-20. The C++20 Synchronization Library.
[P1143R2] Eric Fiselier. 2019-07-18. Adding the constinit keyword.
[P1169R4] Barry Revzin, Casey Carter. 2022-04-11. static operator().
[P1185R2] Barry Revzin. 2019-02-22. <=> != ==.
[P1206R7] Corentin Jabot, Eric Niebler, Casey Carter. 2022-01-21. Conversions from ranges to containers.
[P1208R6] Corentin Jabot, Robert Douglas, Daniel Krugler, Peter Sommerlad. 2019-08-02. Adopt source location from Library Fundamentals V3 for C++20.
[P1209R0] Alisdair Meredith, Stephan T. Lavavej. 2018-10-04. Adopt Consistent Container Erasure from Library Fundamentals 2 for C++20.
[P1222R4] Zach Laine. 2022-06-13. A Standard flat_set.
[P1223R5] Zach Laine. 2022-06-17. find_last.
[P1227R2] Jorg Brown. 2019-02-22. Signed ssize() functions, unsigned size() functions.
[P1272R4] Isabella Muerte, Corentin Jabot. 2021-09-25. Byteswapping for fun&&nuf.
[P1301R4] JeanHeyd Meneide, Isabella Muerte. 2019-08-05. [[nodiscard(“should have a reason”)]].
[P1327R1] Peter Dimov, Vassil Vassilev, Richard Smith. 2018-11-08. Allowing dynamic_cast, polymorphic typeid in Constant Expressions.
[P1328R1] Peter Dimov. 2021-05-03. Making std::type_info::operator== constexpr.
[P1330R0] Louis Dionne, David Vandevoorde. 2018-11-10. Changing the active member of a union inside constexpr.
[P1331R2] CJ Johnson. 2019-07-26. Permitting trivial default initialization in constexpr contexts.
[P1353R0] John Spicer. 2017-11-09. Missing Feature Test Macros.
[P1357R1] Walter E. Brown, Glen J. Fernandes. 2019-02-22. Traits for [Un]bounded Arrays.
[P1361R2] Victor Zverovich, Daniela Engert, Howard E. Hinnant. 2019-07-19. Integration of chrono with text formatting.
[P1383R2] Oliver Rosten. 2023-06-15. More constexpr for cmath and complex.
[P1423R3] Tom Honermann. 2019-07-20. char8_t backward compatibility remediation.
[P1425R4] Corentin Jabot. 2021-03-05. Iterators pair constructors for stack and queue.
[P1452R2] Hubert Tong. 2019-07-18. On the non-uniform semantics of return-type-requirements.
[P1466R3] Howard E. Hinnant. 2019-07-17. Miscellaneous minor fixes for chrono.
[P1612R1] Arthur O’Dwyer. 2019-07-20. Relocate Endian’s Specification.
[P1614R2] Barry Revzin. 2019-07-28. The Mothership Has Landed: Adding <=> to the Library.
[P1630R1] Barry Revzin. 2019-07-17. Spaceship needs a tune-up.
[P1645R1] Ben Deane. 2019-05-14. constexpr for numeric algorithms.
[P1651R0] Tomasz Kamiński. 2019-06-07. bind_front should not unwrap reference_wrapper.
[P1652R1] Zhihao Yuan, Victor Zverovich. 2019-07-18. Printf corner cases in std::format.
[P1659R3] Christopher Di Bella. 2021-02-19. starts_with and ends_with.
[P1661R1] Tomasz Kamiński. 2019-07-18. Remove dedicated precalculated hash lookup interface.
[P1668R1] Erich Keane. 2019-07-17. Enabling constexpr Intrinsics By Permitting Unevaluated inline-assembly in constexpr Functions.
[P1673R13] Mark Hoemmen, Daisy Hollman,Christian Trott,Daniel Sunderland,Nevin Liber,Alicia KlinvexLi-Ta Lo,Damien Lebrun-Grandie,Graham Lopez,Peter Caday,Sarah Knepper,Piotr Luszczek,Timothy Costa. 2023-12-18. A free function linear algebra interface based on the BLAS.
[P1679R3] Wim Leflere, Paul Fee. 2020-07-22. String Contains function.
[P1682R2] JeanHeyd Meneide. 2021-01-16. std::to_underlying.
[P1716R3] Tomasz Kamiński. 2019-11-07. ranges compare algorithm are over-constrained.
[P1754R1] Herb Sutter, Casey Carter, Gabriel Dos Reis, Eric Niebler, Bjarne Stroustrup, Andrew Sutton, Ville Voutilainen. 2019-07-18. Rename concepts to standard_case for C++20, while we still can.
[P1759R6] Elias Kosunen. 2023-05-17. Native handles and file streams.
[P1771R1] Peter Sommerlad. 2019-07-19. [[nodiscard]] for constructors.
[P1774R8] Timur Doumler. 2022-06-14. Portable assumptions.
[P1811R0] Richard Smith, Gabriel Dos Reis. 2019-08-07. Relaxing redefinition restrictions for re-exportation robustness.
[P1814R0] Mike Spertus. 2019-07-28. Wording for Class Template Argument Deduction for Alias Templates.
[P1816R0] Timur Doumler. 2019-07-18. Wording for class template argument deduction for aggregates.
[P1869R1] Tomasz Kamiński, Michał Dominiak. 2019-11-06. Rename“condition_variable_any” interruptible wait methods.
[P1885R12] Corentin Jabot, Peter Brett. 2023-04-05. Naming Text Encodings to Demystify Them.
[P1899R3] Christopher Di Bella, Tim Song. 2022-07-11. stride_view.
[P1901R2] Daryl Haresign. 2023-04-05. Enabling the Use of weak_ptr as Keys in Unordered Associative Containers.
[P1902R1] Barry Revzin. 2019-11-25. Missing feature-test macros 2017-2019.
[P1907R1] Jens Maurer. 2019-11-08. Inconsistencies with non-type template parameters.
[P1938R3] Barry Revzin, Daveed Vandevoorde, Richard Smith, Andrew Sutton. 2021-03-22. if consteval.
[P1956R1] Vincent Reverdy. 2020-02-27. On the naming of low-level bit manipulation functions.
[P1964R2] Tim Song. 2020-02-15. Wording for boolean-testable.
[P1973R1] Nicolai Josuttis. 2020-02-12. Rename _default_init functions (NB Comment DE002).
[P1976R2] Tomasz Kamiński. 2020-02-11. Fixed-size “span”construction from dynamic-size range.
[P2071R2] Tom Honermann, Steve Downey, Peter Bindels, Corentin Jabot, R. Martinho Fernandes. 2022-03-27. Named universal character escapes.
[P2077R3] Konstantin Boyarinov, Sergey Vinogradov; Ruslan Arutyunyan. 2021-10-15. Heterogeneous erasure overloads for associative containers.
[P2093R14] Victor Zverovich. 2022-03-25. Formatted output.
[P2128R6] Corentin Jabot, Isabella Muerte, Daisy Hollman, Christian Trott, Mark Hoemmen. 2021-09-14. Multidimensional subscript operator.
[P2136R3] Zhihao Yuan. 2021-04-30. invoke_r.
[P2162R2] Barry Revzin. 2021-02-18. Inheriting from std::variant (resolving LWG3052).
[P2164R9] Corentin Jabot. 2022-12-07. views::enumerate.
[P2165R4] Corentin Jabot. 2022-07-15. Compatibility between tuple, pair and tuple-like objects.
[P2169R4] Corentin Jabot, Michael Park. 2023-06-16. A Nice Placeholder With No Name.
[P2198R7] Ben Craig. 2022-12-14. Freestanding Feature-Test Macros and Implementation-Defined Extensions.
[P2216R3] Victor Zverovich. 2021-02-15. std::format improvements.
[P2231R1] Barry Revzin. 2021-02-12. Add further constexpr support for optional/variant.
[P2242R3] Ville Voutilainen. 2021-07-13. Non-literal variables (and labels and gotos) in constexpr functions.
[P2248R8] Giuseppe D’Angelo. 2024-03-20. Enabling list-initialization for algorithms.
[P2255R2] Tim Song. 2021-10-14. A type trait to detect reference binding to temporary.
[P2266R3] Arthur O’Dwyer. 2022-03-26. Simpler implicit move.
[P2273R3] Andreas Fertig. 2021-11-09. Making std::unique_ptr constexpr.
[P2278R4] Barry Revzin. 2022-06-17. cbegin should always return a constant iterator.
[P2286R8] Barry Revzin. 2022-05-16. Formatting Ranges.
[P2291R3] Daniil Goncharov, Karaev Alexander. 2021-09-23. Add Constexpr Modifiers to Functions to_chars and from_chars for Integral Types in Header.
[P2302R4] Christopher Di Bella. 2022-04-17. std::ranges::contains.
[P2321R2] Tim Song. 2021-06-11. zip.
[P2322R6] Barry Revzin. 2022-04-22. ranges::fold.
[P2325R3] Barry Revzin. 2021-05-14. Views should not be required to be default constructible.
[P2338R4] Ben Craig. 2023-02-09. Freestanding Library: Character primitives and the C library.
[P2363R5] Konstantin Boyarinov, Sergey Vinogradov, Ruslan Arutyunyan. 2023-02-10. Extending associative containers with the remaining heterogeneous overloads.
[P2372R3] Victor Zverovich, Corentin Jabot. 2021-09-12. Fixing locale handling in chrono formatters.
[P2374R4] Sy Brand, Michał Dominiak. 2022-07-13. views::cartesian_product.
[P2387R3] Barry Revzin. 2021-12-17. Pipe support for user-defined range adaptors.
[P2404R3] Justin Bassett. 2022-07-08. Move-only types for equality_comparable_with, totally_ordered_with, and three_way_comparable_with.
[P2407R5] Ben Craig, Emil Meissner. 2023-07-26. Freestanding Library: Partial Classes.
[P2408R5] David Olsen. 2022-04-22. Ranges iterators as inputs to non-Ranges algorithms.
[P2415R2] Barry Revzin, Tim Song. 2021-10-15. What is a view?
[P2417R2] Daniil Goncharov. 2022-07-16. A more constexpr bitset.
[P2418R2] Victor Zverovich. 2021-09-24. Add support for std::generator-like types to std::format.
[P2419R2] Victor Zverovich, Peter Brett. 2022-07-15. Clarify handling of encodings in localized formatting of chrono types.
[P2440R1] Tim Song. 2021-12-06. ranges::iota, ranges::shift_left, and ranges::shift_right.
[P2441R2] Barry Revzin. 2022-01-28. views::join_with.
[P2442R1] Tim Song. 2021-12-06. Windowing range adaptors: views::chunk and views::slide.
[P2443R1] Tim Song. 2021-11-19. views::chunk_by.
[P2445R1] Gašper Ažman. 2022-05-13. forward_like.
[P2446R2] Barry Revzin. 2022-02-15. views::as_rvalue.
[P2447R6] Arthur O’Dwyer, Federico Kircheis. 2023-12-18. std::span over an initializer list.
[P2448R2] Barry Revzin. 2022-01-27. Relaxing some constexpr restrictions.
[P2465R3] Stephan T. Lavavej, Gabriel Dos Reis, Bjarne Stroustrup, Jonathan Wakely. 2022-03-11. Standard Library Modules std and std.compat.
[P2467R1] Jonathan Wakely. 2022-02-18. Support exclusive mode for fstreams.
[P2474R2] Michał Dominiak. 2022-07-13. views::repeat.
[P2494R2] Michał Dominiak. 2022-07-13. Relaxing range adaptors to allow for move only types.
[P2495R3] Michael Hava. 2023-04-19. Interfacing stringstreams with string_view.
[P2497R0] Jonathan Wakely. 2023-01-25. Testing for success or failure of charconv functions.
[P2502R2] Casey Carter. 2022-06-03. std::generator: Synchronous Coroutine Generator for Ranges.
[P2505R5] Jeff Garland. 2022-09-28. Monadic Functions for std::expected.
[P2508R1] Barry Revzin. 2022-01-18. Exposing std::basic-format-string.
[P2510R3] Mark de Wever. 2022-05-23. Formatting pointers.
[P2513R3] JeanHeyd Meneide, Tom Honermann. 2022-06-17. char8_t Compatibility and Portability Fix.
[P2520R0] Barry Revzin. 2022-01-16. move_iterator should be a random access iterator.
[P2540R1] Steve Downey. 2022-03-14. Empty Product for certain Views.
[P2542R8] Hui Xie, S. Levent Yilmaz. 2024-03-20. views::concat.
[P2545R4] Paul E. McKenney, Michael Wong, Maged M. Michael, Geoffrey Romer, Andrew Hunter, Arthur O’Dwyer, Daisy Hollman, JF Bastien, Hans Boehm, David Goldblatt, Frank Birbacher, Erik Rigtorp, Tomasz Kamiński, Jens Maurer. 2023-03-08. Read-Copy Update (RCU).
[P2546R5] René Ferdinand Rivera Morell. 2023-07-05. Debugging Support.
[P2548R6] Michael Florian Hava. 2023-06-15. copyable_function.
[P2562R1] Oliver Rosten. 2022-06-14. constexpr Stable Sorting.
[P2564R3] Barry Revzin. 2022-11-11. consteval needs to propagate up.
[P2573R2] Yihe Li. 2024-03-22. = delete(“should have a reason”);
[P2585R1] Barry Revzin. 2022-07-15. Improving default container formatting.
[P2587R3] Victor Zverovich. 2022-08-28. to_string or not to_string.
[P2588R3] Gonzalo Brito, Eric A Niebler, Anthony Williams, Thomas Rodgers. 2023-02-07. Relax std::barrier phase completion step guarantees.
[P2589R1] Nevin Liber. 2022-11-11. static operator[].
[P2590R2] Timur Doumler, Richard Smith. 2022-07-15. Explicit lifetime management.
[P2591R5] Giuseppe D’Angelo. 2024-03-20. Concatenation of strings and string views.
[P2592R3] Giuseppe D’Angelo. 2023-02-10. Hashing support for std::chrono value classes.
[P2599R2] Nevin Liber. 2022-06-23. index _type & size_type in mdspan.
[P2602R2] Barry Revzin. 2022-11-07. Poison Pills are Too Toxic.
[P2604R0] Christian Trott. 2022-06-15. MDSPAN: rename pointer and contiguous.
[P2609R3] John Eivind Helset. 2023-02-10. Relaxing Ranges Just A Smidge.
[P2613R1] Yihe Le. 2022-06-29. Add the missing `empty` to `mdspan`.
[P2630R4] Christian Trott, Mark Hoemmen, Damien Lebrun-Grandie, Nevin Liber. 2023-06-22. Submdspan.
[P2637R3] Barry Revzin. 2023-06-15. Member visit.
[P2641R4] Barry Revzin. 2023-06-15. Checking if a union alternative is active.
[P2642R6] Christian Trott, Mark Hoemmen, Damien Lebrun-Grandie, Nicolas Morales, Malte Förster, Jiaming Yuan. 2024-01-19. Padded mdspan layouts.
[P2644R1] Nicolai Josuttis, Herb Sutter, Titus Winter, Hana Dusíková, Fabio Fracassi, Victor Zverovich, Bryce Adelstein Lelbach, Peter Sommerlad. 2022-11-13. Final Fix of Broken Range based for Loop Rev 1.
[P2647R1] Barry Revzin, Jonathan Wakely. 2022-11-08. Permitting static constexpr variables in constexpr functions.
[P2655R3] Hui Xie, S. Levent Yilmaz, Tim Song. 2023-02-07. common_reference_t of reference_wrapper Should Be a Reference Type.
[P2662R3] Corentin Jabot, Pablo Halpern. 2023-12-18. Pack Indexing.
[P2674R1] Timur Doumler, Vittorio Romeo. 2022-11-12. A trait for implicit lifetime types.
[P2697R1] Michael Florian Hava. 2023-06-15. Interfacing bitset with string_view.
[P2714R1] Zhihao Yuan, Tomasz Kamiński. 2023-06-16. Bind front and back to NTTP callables.
[P2718R0] Joshua Berne, Nicolai Josuttis. 2022-11-11. Wording for P2644R1 Fix for Range-based for Loop.
[P2734R0] Marc Mutz. 2022-11-30. Adding the new 2022 SI prefixes.
[P2738R1] Corentin Jabot, David Ledger. 2023-02-13. constexpr cast from void*: towards constexpr type-erasure.
[P2741R3] Corentin Jabot. 2023-06-16. user-generated static_assert messages.
[P2757R3] Barry Revzin. 2023-06-15. Type checking format args.
[P2810R4] René Ferdinand Rivera Morell, Ben Craig. 2024-03-21. is_debugger_present is_replaceable.
[P2819R2] Michael Florian Hava, Christoph Hofer. 2023-12-18. Add tuple protocol to complex.
[P2821R5] Jarrad J. Waterloo. 2023-12-18. span.at().
[P2833R2] Ben Craig. 2023-09-14. Freestanding Library: inout expected span.
[P2836R1] Christopher Di Bella. 2023-07-11. std::basic_const_iterator should follow its underlying type’s convertibility.
[P2845R8] Victor Zverovich. 2024-03-21. Formatting of std::filesystem::path.
[P2893R3] Jody Hagins, Arthur O’Dwyer. 2024-03-22. Variadic Friends.
[P2909R4] Victor Zverovich. 2023-12-18. Fix formatting of code units as integers (Dude, where’s my char?).
[P2918R2] Victor Zverovich. 2023-12-18. Runtime format strings II.
[P2937R0] Ben Craig. 2023-07-02. Freestanding: Remove strtok.
[P2944R3] Barry Revzin. 2024-03-21. Comparisons for reference_wrapper.
[P3107R5] Victor Zverovich. 2024-03-21. Permit an efficient implementation of std::print.