Namespaces
Variants

Template:cpp/utility/lang feature macros

From cppreference.com
Macro name Feature Value Std Paper(s)
__cpp_aggregate_bases Aggregate classes with base classes 201603L (C++17) P0017R1
__cpp_aggregate_nsdmi Aggregate classes with default member initializers 201304L (C++14) N3653
__cpp_aggregate_paren_init Aggregate initialization in the form of direct initialization 201902L (C++20) P0960R3
__cpp_alias_templates Alias templates 200704L (C++11) N2258
__cpp_aligned_new Dynamic memory allocation for over-aligned data 201606L (C++17) P0035R4
__cpp_attributes Attributes 200809L (C++11) N2761
__cpp_auto_cast Casting an expression to a prvalue (auto(x)) 202110L (C++23) P0849R8
__cpp_binary_literals Binary literals 201304L (C++14) N3472
__cpp_capture_star_this Lambda capture of *this by value as [=,*this] 201603L (C++17) P0018R3
__cpp_char8_t char8_t 201811L (C++20) P0482R6
char8_t compatibility and portability fix (allow initialization of (unsigned) char arrays from UTF-8 string literals) 202207L (C++23)
(DR20)
P2513R4
__cpp_concepts Concepts 201907L (C++20) P0734R0
P1084R2
P1452R2
Conditional trivial special member functions 202002L P0848R3
P2493R0
Conditional noexcept specifiers in compound requirements 202606L (C++29) P3822R2
__cpp_conditional_explicit Conditional explicit specifier 201806L (C++20) P0892R2
__cpp_consteval Immediate functions 201811L (C++20) P1073R3
Making consteval propagate up 202211L (C++23)
(DR20)
P2564R3
consteval-only values 202606L (C++29)
(DR26)
P4101R1
__cpp_constexpr constexpr 200704L (C++11) N2235
Relaxed constexpr, non-const constexpr methods 201304L (C++14) N3652
Constexpr lambda 201603L (C++17) P0170R1
Virtual function calls in constant expressions; try blocks in constexpr functions, dynamic_cast and polymorphic typeid in constant expressions; trivial default initialization and asm-declaration in constexpr functions 201907L (C++20) P1064R0
P1002R1
P1327R1
P1331R2
P1668R1
Changing the active member of a union in constant evaluation 202002L P1330R0
P2493R0
Non-literal variables, labels, and goto statements in constexpr functions 202110L (C++23) P2242R3
Relaxing some restrictions on constexpr functions and function templates 202207L P2448R2
Permitting static constexpr variables in constexpr functions 202211L P2647R1
Constexpr cast from void*: towards constexpr type-erasure 202306L (C++26) P2738R1
Constexpr placement new 202406L P2747R2
__cpp_constexpr_dynamic_alloc Operations for dynamic storage duration in constexpr functions 201907L (C++20) P0784R7
__cpp_constexpr_exceptions Constexpr exceptions 202411L (C++26) P3068R6
__cpp_constexpr_in_decltype Generation of function and variable definitions when needed for constant evaluation 201711L (C++20)
(DR11)
P0859R0
__cpp_constexpr_virtual_inheritance Constexpr virtual inheritance 202506L (C++26) P3533R2
__cpp_constinit constinit 201907L (C++20) P1143R2
__cpp_contracts Contracts 202502L (C++26) P2900R14
Contracts for virtual functions 202606L (C++29) P3097R3
__cpp_decltype decltype 200707L (C++11) N2343
__cpp_decltype_auto Return type deduction for normal functions 201304L (C++14) N3638
__cpp_deduction_guides Template argument deduction for class templates (CTAD) 201703L (C++17) P0091R3
P0512R0
P0620R0
CTAD for aggregates and aliases 201907L (C++20) P1814R0
P1816R0
__cpp_delegating_constructors Delegating constructors 200604L (C++11) N1986
__cpp_deleted_function Deleted function definitions with messages (= delete("should have a reason");) 202403L (C++26) P2573R2
__cpp_designated_initializers Designated initializers 201707L (C++20) P0329R4
Designated initializers for base classes 202606L (C++29) P2287R6
__cpp_enumerator_attributes Attributes for enumerators 201411L (C++17) N4266
__cpp_expansion_statements Expansion statements (template for) 202506L (C++26) P1306R5
__cpp_explicit_this_parameter Explicit object parameter 202110L (C++23) P0847R7
__cpp_fold_expressions Fold expressions 201603L (C++17) N4295
P0036R0
Ordering of constraints involving fold expressions 202406L (C++26) P2963R3
__cpp_generic_lambdas Generic lambda expressions 201304L (C++14) N3649
Explicit template parameter list for generic lambdas 201707L (C++20) P0428R2
__cpp_guaranteed_copy_elision Guaranteed copy elision through simplified value categories 201606L (C++17) P0135R1
__cpp_hex_float Hexadecimal floating literals 201603L (C++17) P0245R1
__cpp_if_consteval if consteval 202106L (C++23) P1938R3
__cpp_if_constexpr if constexpr 201606L (C++17) P0292R2
__cpp_impl_coroutine Coroutines (compiler support) 201902L (C++20) P0912R5
LWG3393
Removing mutual exclusivity for coroutine promise return functions 202606L (C++29)
(DR20)
P3950R1
__cpp_impl_destroying_delete Destroying operator delete (compiler support) 201806L (C++20) P0722R3
__cpp_impl_reflection Reflection 202506L (C++26) P2996R13
P3096R12
P3293R3
P3394R4
P3795R2
__cpp_impl_three_way_comparison Three-way comparison (compiler support) 201907L (C++20) P0515R3
P0768R1
P1185R2
P1630R1
__cpp_implicit_move Simpler implicit move 202207L (C++23) P2266R3
__cpp_inheriting_constructors Inheriting constructors 200802L (C++11) N2540
New specification for inheriting constructors 201511L (C++17)
(DR11)
P0136R1
__cpp_init_captures Lambda init-capture 201304L (C++14) N3648
Allow pack expansion in lambda init-capture 201803L (C++20) P0780R2
__cpp_initializer_lists List-initialization and std::initializer_list 200806L (C++11) N2672
__cpp_inline_variables Inline variables 201606L (C++17) P0386R2
__cpp_lambdas Lambda expressions 200907L (C++11) N2927
__cpp_modules Modules 201907L (C++20) P1103R3
P1811R0
__cpp_multidimensional_subscript Multidimensional subscript operator 202110L (C++23) P2128R6
Static operator[] 202211L P2589R1
__cpp_named_character_escapes Named universal character escapes 202207L (C++23) P2071R2
__cpp_namespace_attributes Attributes for namespaces 201411L (C++17) N4266
__cpp_noexcept_function_type Make exception specifications be part of the type system 201510L (C++17) P0012R1
__cpp_nontype_template_args Allow constant evaluation for all non-type template arguments 201411L (C++17) N4268
Class types and floating-point types in non-type template parameters 201911L (C++20) P1907R1
__cpp_nontype_template_parameter_auto Declaring non-type template parameter with auto 201606L (C++17) P0127R2
__cpp_nsdmi Non-static data member initializers 200809L (C++11) N2756
__cpp_pack_indexing Pack indexing 202311L (C++26) P2662R3
Pack indexing for templates 202606L (C++29) P3670R4
__cpp_placeholder_variables A nice placeholder with no name 202306L (C++26) P2169R4
__cpp_pp_embed #embed 202502L (C++26) P1967R14
#embed offset parameter 202606L (C++29) P3540R3
__cpp_range_based_for Range-based for loop 200907L (C++11) N2930
Range-based for loop with different begin/end types 201603L (C++17) P0184R0
Lifetime extension in range-based for 202211L (C++23) P2644R1
P2718R0
CWG2659
__cpp_raw_strings Raw string literals 200710L (C++11) N2442
__cpp_ref_qualifiers ref-qualifiers 200710L (C++11) N2439
__cpp_return_type_deduction Return type deduction for normal functions 201304L (C++14) N3638
__cpp_rvalue_references Rvalue reference 200610L (C++11) N2118
__cpp_size_t_suffix Literal suffixes for std::size_t and its signed version 202011L (C++23) P0330R8
__cpp_sized_deallocation Sized deallocation 201309L (C++14) N3778
__cpp_static_assert static_assert 200410L (C++11) N1720
Single-argument static_assert 201411L (C++17) N3928
User-generated static_assert messages 202306L (C++26) P2741R3
__cpp_static_call_operator Static operator() 202207L (C++23) P1169R4
__cpp_structured_bindings Structured bindings 201606L (C++17) P0217R3
Attributes for structured binding 202403L (C++26) P0609R3
Structured binding declaration as a condition 202406L P0963R3
Structured bindings can introduce a pack 202411L P1061R10
__cpp_template_parameters Concept and variable-template template-parameters 202502L (C++26) P2841R7
__cpp_template_template_args Matching of template template arguments 201611L (C++17) P0522R0
__cpp_threadsafe_static_init Dynamic initialization and destruction with concurrency 200806L (C++11) N2660
__cpp_trivial_union Trivial unions 202603L (C++26) P3074R7
P3726R2
__cpp_unicode_characters New character types (char16_t and char32_t) 200704L (C++11) N2249
__cpp_unicode_literals Unicode string literals 200710L (C++11) N2442
__cpp_user_defined_literals User-defined literals 200809L (C++11) N2765
__cpp_using_enum using enum 201907L (C++20) P1099R5
__cpp_variable_templates Variable templates 201304L (C++14) N3651
__cpp_variadic_friend Variadic friend declarations 202403L (C++26) P2893R3
__cpp_variadic_templates Variadic templates 200704L (C++11) N2242
__cpp_variadic_using Pack expansions in using-declarations 201611L (C++17) P0195R2
Total number of macros: 78