|
lucenaBAL 3.0.0
Lucena Build Abstraction Library for C++
|
Language feature availability flags to indicate whether a given C++ feature is supported by the current compiler. More...

LBAL_CPP03 | |
These are here only because compilers can be made to disable specific features for various reasons and we want to have a universal way of determining whether that’s happened. | |
| #define | LBAL_CPP03_EXCEPTIONS |
| Language-level support for C++ Exceptions. | |
| #define | LBAL_CPP03_RTTI |
| Language-level support for run-time type identification (RTTI). | |
LBAL_CPP11 | |
All supported compilers support all required features of C++11. However, thread-safe static initialization can be explicitly disabled in some implementations, and garbage collection was an optional feature from C++11 until C++23, when it was removed. The rest of these are supplied to allow testing for specific features when using older language dialects, unsupported compilers, or when general language version detection is unavailable.
| |
| #define | LBAL_CPP11_ALIAS_TEMPLATES |
| Allow type aliases to be templated. | |
| #define | LBAL_CPP11_ATTRIBUTES |
| Formalize attributes as a language feature. | |
| #define | LBAL_CPP11_ATTRIBUTE_CARRIES_DEPENDENCY |
| Optimization hint when compiling with certain memory models. | |
| #define | LBAL_CPP11_ATTRIBUTE_NORETURN |
| Indicate that a function does not return. | |
| #define | LBAL_CPP11_CONSTEXPR |
| Specify generalized constant expressions. | |
| #define | LBAL_CPP11_DECLTYPE |
| Query the type of an expression. | |
| #define | LBAL_CPP11_DELEGATING_CONSTRUCTORS |
| Delegating constructors. | |
| #define | LBAL_CPP11_INHERITING_CONSTRUCTORS |
| Inheriting Constructors. | |
| #define | LBAL_CPP11_INITIALIZER_LISTS |
| Initializer lists. | |
| #define | LBAL_CPP11_LAMBDAS |
| Support for Lambda functions. | |
| #define | LBAL_CPP11_MINIMAL_GARBAGE_COLLECTION |
| Support for optional C++ garbage collection. | |
| #define | LBAL_CPP11_NSDMI |
| Support for non-static data member initializers. | |
| #define | LBAL_CPP11_RANGE_BASED_FOR |
| Range-based for-loops. | |
| #define | LBAL_CPP11_RAW_STRINGS |
| Support for raw string literals. | |
| #define | LBAL_CPP11_REF_QUALIFIERS |
| Extend move semantics to *this. | |
| #define | LBAL_CPP11_RVALUE_REFERENCES |
| Add rvalue references. | |
| #define | LBAL_CPP11_STATIC_ASSERT |
| Add static assertions. | |
| #define | LBAL_CPP11_THREADSAFE_STATIC_INIT |
| Support for thread-safe static initialization. | |
| #define | LBAL_CPP11_UNICODE_CHARACTERS |
| Add char16_t and char32_t with requisite Unicode encoding. | |
| #define | LBAL_CPP11_UNICODE_LITERALS |
| Support for Unicode string literals. | |
| #define | LBAL_CPP11_USER_DEFINED_LITERALS |
| Support for user-defined literals. | |
| #define | LBAL_CPP11_VARIADIC_TEMPLATES |
| Support for templates with variable numbers of arguments. | |
LBAL_CPP14 | |
All supported compilers support all features of C++14, but some of them may require that sized deallocation be explicitly enabled. | |
| #define | LBAL_CPP14_AGGREGATE_NSDMI |
| Relax the requirements on aggregates and specify aggregate member initialization. | |
| #define | LBAL_CPP14_ATTRIBUTE_DEPRECATED |
| Support for marking symbols as deprecated. | |
| #define | LBAL_CPP14_BINARY_LITERALS |
| Add binary literal support. | |
| #define | LBAL_CPP14_CONSTEXPR_RELAXED_CONSTRAINTS |
| Relax constraints on constexpr functions, constexpr member functions and implicit const. | |
| #define | LBAL_CPP14_DECLTYPE_AUTO |
| Allow deduced return types and decltype (auto). | |
| #define | LBAL_CPP14_GENERIC_LAMBDAS |
| Generic (Polymorphic) Lambda Expressions. | |
| #define | LBAL_CPP14_INIT_CAPTURES |
| Generalized Lambda-capture changes. | |
| #define | LBAL_CPP14_RETURN_TYPE_DEDUCTION |
| Support for return type deduction for normal functions. | |
| #define | LBAL_CPP14_SIZED_DEALLOCATION |
| Make available a global operator delete that takes a size argument. | |
| #define | LBAL_CPP14_VARIABLE_TEMPLATES |
| Support for variable templates. | |
LBAL_CPP17 | |
All supported compilers support all language features of C++17, but some of them may require that template template arguments be explicitly enabled. | |
| #define | LBAL_CPP17_AGGREGATE_BASES |
| Relax the restrictions on aggregate initialization. | |
| #define | LBAL_CPP17_ALIGNED_NEW |
| Specify handling of dynamic memory allocation for over-aligned data. | |
| #define | LBAL_CPP17_ATTRIBUTE_FALLTHROUGH |
| Indicate that a case within a switch statements falls through. | |
| #define | LBAL_CPP17_ATTRIBUTE_MAYBE_UNUSED |
| Indicate that a name or entity is possibly intentionally unused. | |
| #define | LBAL_CPP17_ATTRIBUTE_NODISCARD |
| Indicate that a function return, class, or enum should not be ignored. | |
| #define | LBAL_CPP17_CAPTURE_STAR_THIS |
| Allow lambda capture of *this by value as as [=,*this]. | |
| #define | LBAL_CPP17_CONSTEXPR_LAMBDA |
| Allow lambdas to be constexpr explicitly or implicitly. | |
| #define | LBAL_CPP17_DEDUCTION_GUIDES |
| Template argument deduction for class templates. | |
| #define | LBAL_CPP17_DEDUCTION_GUIDES_DR |
| Address additional class template argument deduction issues. | |
| #define | LBAL_CPP17_DEDUCTION_GUIDES_NB |
| Address issues that came up during C++17 balloting regarding class template argument deduction. | |
| #define | LBAL_CPP17_ENUMERATOR_ATTRIBUTES |
| Attributes for enumerators. | |
| #define | LBAL_CPP17_FOLD_EXPRESSIONS |
| Allow folding a template parameter pack over a binary operator. | |
| #define | LBAL_CPP17_FOLD_EXPRESSIONS_REVISED |
| Add support for unary folds and empty parameter packs to fold expressions. | |
| #define | LBAL_CPP17_GUARANTEED_COPY_ELISION |
| Guarantee copy and move elision in well-defined situations. | |
| #define | LBAL_CPP17_HEX_FLOAT |
| Specify Hexadecimal float literals. | |
| #define | LBAL_CPP17_IF_CONSTEXPR |
| Allow constant expressions as if statements. | |
| #define | LBAL_CPP17_INHERITING_CONSTRUCTORS_REVISED |
| Address core issues raised by Inheriting Constructors. | |
| #define | LBAL_CPP17_INLINE_VARIABLES |
| inline variables | |
| #define | LBAL_CPP17_NAMESPACE_ATTRIBUTES |
| Attributes for namespaces. | |
| #define | LBAL_CPP17_NOEXCEPT_FUNCTION_TYPE |
| Make exception specifications be part of the type system. | |
| #define | LBAL_CPP17_NONTYPE_TEMPLATE_ARGS |
| Allow constant evaluation for all non-type template arguments. | |
| #define | LBAL_CPP17_NONTYPE_TEMPLATE_PARAMETER_AUTO |
| Allow declaring non-type template arguments with auto. | |
| #define | LBAL_CPP17_RANGE_BASED_FOR_GENERALIZED |
| Generalize range-based for-loops. | |
| #define | LBAL_CPP17_STATIC_ASSERT_NO_MESSAGE |
| Allow static assertions with no messages. | |
| #define | LBAL_CPP17_STRUCTURED_BINDINGS |
| Add support for multiple function return values and more. | |
| #define | LBAL_CPP17_TEMPLATE_TEMPLATE_ARGS |
| Resolve a defect in the matching of template arguments with template parameters. | |
| #define | LBAL_CPP17_VARIADIC_USING |
| Add support for pack expansions in using-declarations. | |
LBAL_CPP20 | |
Identify language features specific to the C++20 Standard Support across compilers for C++20 features is currently inconsistent, and is one of the fundamental reasons why lucenaBAL exists. These will be updated regularly as the Standard develops. Note that a very large number of features do not have SD-6 macros, so we often provide our own tokens. Should an official macro be created, we will synchronize with it and deprecate the proprietary one. | |
| #define | LBAL_CPP20_AGGREGATE_PAREN_INIT |
| Allow aggregate initialization from parentheses as well as braces. | |
| #define | LBAL_CPP20_ALLOW_LAMBDA_CAPTURE_EQUALS_THIS |
| Allow lambda capture [=, this]. | |
| #define | LBAL_CPP20_ATTRIBUTES_LIKELY_AND_UNLIKELY |
| Aggregate tracking the availability of likely and unlikely attributes. | |
| #define | LBAL_CPP20_ATTRIBUTE_LIKELY |
| Add likely attribute for labels and statements. | |
| #define | LBAL_CPP20_ATTRIBUTE_NODISCARD_EXPANDED |
| Add explanatory text to the nodiscard attribute and allow it on constructors. | |
| #define | LBAL_CPP20_ATTRIBUTE_NO_UNIQUE_ADDRESS |
| Add language support for for empty objects. | |
| #define | LBAL_CPP20_ATTRIBUTE_UNLIKELY |
| Add unlikely attribute for labels and statements. | |
| #define | LBAL_CPP20_CHAR8_T |
| Add char8_t as a UTF-8 equivalent for char16_t and char32_t. | |
| #define | LBAL_CPP20_CONCEPTS |
| Incorporate the Concepts TS into the Standard. | |
| #define | LBAL_CPP20_CONCEPTS_CONDITIONALLY_TRIVIAL_SPECIAL_MEMBER_FUNCTIONS |
| Make special member functions conditionally trivial. | |
| #define | LBAL_CPP20_CONCEPTS_REFINE_RETURN_TYPE_REQUIREMENTS |
| Refine definition of return-type-requirements. | |
| #define | LBAL_CPP20_CONCEPTS_RESPECIFY_RETURN_TYPE_REQUIREMENTS |
| Refine definition of return-type-requirements. | |
| #define | LBAL_CPP20_CONDITIONAL_EXPLICIT |
| Support explicit (bool). | |
| #define | LBAL_CPP20_CONSTEVAL |
| Immediate functions. | |
| #define | LBAL_CPP20_CONSTEXPR_CHANGE_ACTIVE_UNION_MEMBER |
| Allow the active member of a union inside constexpr to change. | |
| #define | LBAL_CPP20_CONSTEXPR_DYNAMIC_ALLOC |
| Language support for variable-sized containers suitable for use in constexpr computations. | |
| #define | LBAL_CPP20_CONSTEXPR_DYNAMIC_POLYMORPHISM |
| Allow dynamic_cast, polymorphic typeid in constexpr functions. | |
| #define | LBAL_CPP20_CONSTEXPR_INTRINSICS |
| Permit unevaluated inline assembly in constexpr functions. | |
| #define | LBAL_CPP20_CONSTEXPR_IN_DECLTYPE |
| Address Core Issue regarding when constexpr functions are defined. | |
| #define | LBAL_CPP20_CONSTEXPR_TRIVIAL_DEFAULT_INITIALIZATION |
| Address an inconsistency in the lambda specification. | |
| #define | LBAL_CPP20_CONSTEXPR_TRY_CATCH |
| Permit unevaluated inline assembly in constexpr functions. | |
| #define | LBAL_CPP20_CONSTEXPR_UNION_ALTERATION |
| Allow changing the active member of a union inside constexpr. | |
| #define | LBAL_CPP20_CONSTEXPR_VIRTUAL_FUNCTION |
| Allow virtual function calls in constexpr functions. | |
| #define | LBAL_CPP20_CONSTINIT |
| Add the constinit keyword. | |
| #define | LBAL_CPP20_CONST_REF_QUALIFIED_POINTERS_TO_MEMBERS |
| Fix const-qualified pointers to members. | |
| #define | LBAL_CPP20_DEDUCTION_GUIDES_FOR_AGGREGATES |
| Class template argument deduction for aggregates. | |
| #define | LBAL_CPP20_DEFAULT_CONSTRUCTIBLE_AND_ASSIGNABLE_STATELESS_LAMBDAS |
| Support default-constructible and -assignable stateless lambdas. | |
| #define | LBAL_CPP20_DEFAULT_MEMBER_INITIALIZERS_FOR_BIT_FIELDS |
| Default member initializers for bit-fields. | |
| #define | LBAL_CPP20_DESIGNATED_INITIALIZERS |
| Add designated initializers. | |
| #define | LBAL_CPP20_DESTROYING_DELETE |
| Efficient sized delete for variable sized classes. | |
| #define | LBAL_CPP20_GENERIC_LAMBDAS_TEMPLATE_PARAMETER_LIST |
| Generic (Polymorphic) Lambda Expressions. | |
| #define | LBAL_CPP20_IMPL_COROUTINE |
| Add necessary language support for the <coroutine> library feature. | |
| #define | LBAL_CPP20_INIT_CAPTURES_PACK_EXPANSION |
| Allow pack-expansion in lambda init-capture. | |
| #define | LBAL_CPP20_INIT_STATEMENTS_FOR_RANGE_BASED_FOR |
| Add range-based for statements with initializer. | |
| #define | LBAL_CPP20_INTEGRATING_OUR_FEATURE_TEST_MACROS |
| Integrate universal feature test macros into the Standard. | |
| #define | LBAL_CPP20_MODULES |
| Incorporate modules. | |
| #define | LBAL_CPP20_NONTYPE_TEMPLATE_ARGS_FIXES |
| Address inconsistencies in handling of non-type template arguments. | |
| #define | LBAL_CPP20_NONTYPE_TEMPLATE_PARAMETER_CLASS |
| Class Types in Non-Type Template Parameters. | |
| #define | LBAL_CPP20_THREE_WAY_COMPARISON_OPERATOR |
| This is the original three-way comparison operator. | |
| #define | LBAL_CPP20_THREE_WAY_COMPARISON_OPERATOR_EQUALITY_FIX |
| This is the original three-way comparison operator. | |
| #define | LBAL_CPP20_THREE_WAY_COMPARISON_OPERATOR_TUNEUP |
| This is the updated three-way comparison operator. | |
| #define | LBAL_CPP20_TYPENAME_OPTIONAL |
| Down with typename! | |
| #define | LBAL_CPP20_USING_ENUM |
| Specify using aliases for enums. | |
| #define | LBAL_CPP20_VA_OPT |
| Provide a smarter predefined macro equivalent to VA__ARGS. | |
LBAL_CPP23 | |
Identify language features specific to the C++23 Standard Support across compilers for C++23 features is currently inconsistent, and is one of the fundamental reasons why lucenaBAL exists. These will be updated regularly as the Standard develops. Note that a some features do not have formal SD-6 tokens, so we often provide our own. Should an official token be created, we will synchronize with it and deprecate the proprietary one. | |
| #define | LBAL_CPP23_ATTRIBUTE_ASSUME |
| Optimization hint to indicate an expression is true. | |
| #define | LBAL_CPP23_AUTO_CAST |
| auto(x): decay-copy in the language | |
| #define | LBAL_CPP23_CHAR8_T_COMPATIBILITY |
| char8_t Compatibility and Portability Fix | |
| #define | LBAL_CPP23_CONSTEVAL_PROPAGATE_UP |
| consteval needs to propagate up | |
| #define | LBAL_CPP23_CONSTEXPR_NON_LITERAL_VARIABLES |
| Allow non-literal variables, labels, and gotos in constexpr functions. | |
| #define | LBAL_CPP23_CONSTEXPR_PERMIT_STATIC_CONSTEXPR |
| Permit static constexpr variables in constexpr functions. | |
| #define | LBAL_CPP23_CONSTEXPR_RELAX_RESTRICTIONS |
| Relax some constexpr restrictions. | |
| #define | LBAL_CPP23_DEDUCTION_GUIDES_FROM_INHERITED_CONSTRUCTORS |
| Allow class template argument deduction from inherited constructors. | |
| #define | LBAL_CPP23_EXPLICIT_THIS_PARAMETER |
| Deduce this. | |
| #define | LBAL_CPP23_IF_CONSTEVAL |
| if consteval | |
| #define | LBAL_CPP23_IMPLICIT_MOVE |
| Simpler implicit move. | |
| #define | LBAL_CPP23_MULTIDIMENSIONAL_SUBSCRIPT |
| Add a multidimensional subscript operator. | |
| #define | LBAL_CPP23_MULTIDIMENSIONAL_SUBSCRIPT_STATIC |
| static operator [] | |
| #define | LBAL_CPP23_NAMED_CHARACTER_ESCAPES |
| Add named universal character escapes. | |
| #define | LBAL_CPP23_RANGE_BASED_FOR_TEMPORARIES |
| Allow some temporaries in range-based for-loops. | |
| #define | LBAL_CPP23_SIZE_T_SUFFIX |
| Add literal suffixes for (signed) size_t. | |
| #define | LBAL_CPP23_STATIC_CALL_OPERATOR |
| Static operator (). | |
LBAL_CPP26 | |
Identify language features specific to the C++26 Standard Support across compilers for C++26 features is currently inconsistent, and is one of the fundamental reasons why lucenaBAL exists. These will be updated regularly as the Standard develops. Note that a some features do not have formal SD-6 tokens, so we often provide our own. Should an official token be created, we will synchronize with it and deprecate the proprietary one. | |
| #define | LBAL_CPP26_ATTRIBUTE_INDETERMINATE |
| Erroneous behaviour for uninitialized reads. | |
| #define | LBAL_CPP26_CONSTEXPR_CAST_FROM_VOID_STAR |
| All constexpr cast from void *. | |
| #define | LBAL_CPP26_CONSTEXPR_EXCEPTIONS |
| Allow exception throwing in constant-evaluation. | |
| #define | LBAL_CPP26_CONSTEXPR_PLACEMENT_NEW |
| Add constexpr placement new. | |
| #define | LBAL_CPP26_CONSTEXPR_VIRTUAL_INHERITANCE |
| Allow exception throwing in constant-evaluation. | |
| #define | LBAL_CPP26_CONTRACTS |
| Contracts for C++. | |
| #define | LBAL_CPP26_DELETED_FUNCTION |
| = delete(\should have a reason\). | |
| #define | LBAL_CPP26_EXPANSION_STATEMENTS |
| Expansion statements. | |
| #define | LBAL_CPP26_IMPL_REFLECTION |
| Reflection for C++26. | |
| #define | LBAL_CPP26_IMPL_REFLECTION_CLEANUP |
| Miscellaneous Reflection Cleanup. | |
| #define | LBAL_CPP26_PACK_INDEXING |
| Pack Indexing. | |
| #define | LBAL_CPP26_PLACEHOLDER_VARIABLES |
| Add placeholder variables (aka underscore, underbar, low line). | |
| #define | LBAL_CPP26_PP_EMBED |
| #embed - a scannable, tooling-friendly binary resource inclusion mechanism | |
| #define | LBAL_CPP26_STATIC_ASSERT_USER_MESSAGE |
| Allow static assertions with user-generated messages. | |
| #define | LBAL_CPP26_STRUCTURED_BINDINGS_ATTRIBUTES |
| Allow attributes for Structured Bindings. | |
| #define | LBAL_CPP26_STRUCTURED_BINDINGS_PACK |
| Structured Bindings can introduce a Pack. | |
| #define | LBAL_CPP26_TEMPLATE_PARAMETERS |
| Allow concept and variable-template template-parameters. | |
| #define | LBAL_CPP26_TRIVIAL_UNION |
| Allow trivial unions. | |
| #define | LBAL_CPP26_TRIVIAL_UNION_LIFETIME |
| Adjustments to union Lifetime Rules. | |
| #define | LBAL_CPP26_VARIADIC_FRIEND |
| Support variadic friends. | |
LBAL_CPP2D | |
Identify language features specific to the proposed C++29 Standard C++29—which in draft form is referenced as C++2d—is undergoing active development. In order to allow testing, we track approved language features here. Since this is all non-final, we use LBAL_CPP2D_xxx tokens instead of LBAL_CPP29_xxx tokens; upon finalization, we’ll update the token names and deprecate the old forms. Designation of formal SD-6 tokens tends to lag approval of proposals, so we will used the proposed tokens and derive our own tokens from those; where there is not even a proposed token, we’ll make one up. Once official tokens are created, we will synchronize with them it and deprecate the speculative ones. | |
| #define | LBAL_CPP2D_CONCEPTS_CONDITIONAL_NOEXCEPT |
| Conditional noexcept specifiers in compound requirements. | |
| #define | LBAL_CPP2D_CONSTEVAL_ONLY |
| consteval-only Values for C++26 | |
| #define | LBAL_CPP2D_CONTRACTS_VIRTUAL |
| Contracts for C++: Virtual functions. | |
| #define | LBAL_CPP2D_DESIGNATED_INITIALIZERS_BASE_CLASSES |
| Designated-initializers for Base Classes. | |
| #define | LBAL_CPP2D_IMPL_COROUTINE_RETURN |
| return_value & return_void Are Not Mutually Exclusive | |
| #define | LBAL_CPP2D_PACK_INDEXING_TEMPLATE_NAMES |
| Pack Indexing for Template Names. | |
| #define | LBAL_CPP2D_PP_EMBED_OFFSET |
| #embed offset parameter | |
LBAL_C99 | |
Feature availability macros to indicate whether a given C99 feature is supported by the current compiler. Each one is set to 1 if available and 0 otherwise. | |
| #define | LBAL_C99_PREPROCESSOR |
Language feature availability flags to indicate whether a given C++ feature is supported by the current compiler.
These are set to a non-zero value if available and 0 otherwise; every token is always set to some value. Where possible, these mimic the equivalent SD-6 macros, both in their naming and in their range of values, so a value will be:
Note that these tokens are neither exhaustive nor bounded:
Finally, the descriptions of the various language and library features listed here tend to be terse or oblique. This is because this documentation is not intended to be a C++ reference there are much better references out there. Rather, it is hoped that enough context is given to remind you of what a given feature does, and then any additional notes are intended only to describe gotchas and implementation oddities specific to the feature detection problem domain.
| #define LBAL_C99_PREPROCESSOR |
| #define LBAL_CPP03_EXCEPTIONS |
Language-level support for C++ Exceptions.
This can be conditionally disabled at build-time, so we can’t rely on a language version test to detect it.
SD-6 equivalent: __cpp_exceptions >= 199711L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP03_RTTI |
Language-level support for run-time type identification (RTTI).
This can be conditionally disabled at build-time, so we can’t rely on a language version test to detect it.
SD-6 equivalent: __cpp_rtti >= 199711L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP11_ALIAS_TEMPLATES |
Allow type aliases to be templated.
SD-6 equivalent: __cpp_alias_templates >= 200704L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP11_ATTRIBUTE_CARRIES_DEPENDENCY |
Optimization hint when compiling with certain memory models.
SD-6 equivalent: __has_cpp_attribute(carries_dependency) >= 200809L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP11_ATTRIBUTE_NORETURN |
Indicate that a function does not return.
SD-6 equivalent: __has_cpp_attribute(noreturn) >= 200809L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP11_ATTRIBUTES |
Formalize attributes as a language feature.
SD-6 equivalent: __cpp_attributes >= 200809L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP11_CONSTEXPR |
Specify generalized constant expressions.
SD-6 equivalent: __cpp_constexpr >= 200704L. Note that __cpp_constexpr has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP11_DECLTYPE |
Query the type of an expression.
SD-6 equivalent: __cpp_decltype >= 200707L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP11_DELEGATING_CONSTRUCTORS |
Delegating constructors.
SD-6 equivalent: __cpp_delegating_constructors >= 200604L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP11_INHERITING_CONSTRUCTORS |
Inheriting Constructors.
SD-6 equivalent: __cpp_inheriting_constructors >= 200802L. Note that __cpp_inheriting_constructors has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP11_INITIALIZER_LISTS |
Initializer lists.
SD-6 equivalent: __cpp_initializer_lists >= 200806L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP11_LAMBDAS |
Support for Lambda functions.
SD-6 equivalent: __cpp_lambdas >= 200907L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP11_NSDMI |
Support for non-static data member initializers.
SD-6 equivalent: __cpp_nsdmi >= 200809L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP11_RANGE_BASED_FOR |
Range-based for-loops.
SD-6 equivalent: __cpp_range_based_for >= 200907L. Note that __cpp_range_based_for has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP11_RAW_STRINGS |
Support for raw string literals.
SD-6 equivalent: __cpp_raw_strings >= 200710L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP11_REF_QUALIFIERS |
Extend move semantics to *this.
SD-6 equivalent: __cpp_ref_qualifiers >= 200710L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP11_RVALUE_REFERENCES |
Add rvalue references.
SD-6 equivalent: __cpp_rvalue_references >= 200610L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP11_STATIC_ASSERT |
Add static assertions.
SD-6 equivalent: __cpp_static_assert >= 200410L. Note that __cpp_static_assert has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP11_THREADSAFE_STATIC_INIT |
Support for thread-safe static initialization.
Some compilers can disable this feature if asked; the token will be set to 0 if that has happened.
SD-6 equivalent: __cpp_threadsafe_static_init >= 200806L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP11_UNICODE_CHARACTERS |
Add char16_t and char32_t with requisite Unicode encoding.
SD-6 equivalent: __cpp_unicode_characters >= 200704L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP11_UNICODE_LITERALS |
Support for Unicode string literals.
SD-6 equivalent: __cpp_unicode_literals >= 200710L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP11_USER_DEFINED_LITERALS |
Support for user-defined literals.
SD-6 equivalent: __cpp_user_defined_literals >= 200809L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP11_VARIADIC_TEMPLATES |
Support for templates with variable numbers of arguments.
SD-6 equivalent: __cpp_variadic_templates >= 200704L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP14_AGGREGATE_NSDMI |
Relax the requirements on aggregates and specify aggregate member initialization.
SD-6 equivalent: __cpp_aggregate_nsdmi >= 201304L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP14_ATTRIBUTE_DEPRECATED |
Support for marking symbols as deprecated.
SD-6 equivalent: __has_cpp_attribute(deprecated) >= 201309L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP14_BINARY_LITERALS |
Add binary literal support.
SD-6 equivalent: __cpp_binary_literals >= 201304L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP14_CONSTEXPR_RELAXED_CONSTRAINTS |
Relax constraints on constexpr functions, constexpr member functions and implicit const.
SD-6 equivalent: __cpp_constexpr >= 201304L. Note that __cpp_constexpr has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP14_DECLTYPE_AUTO |
Allow deduced return types and decltype (auto).
SD-6 equivalent: __cpp_decltype_auto >= 201304L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP14_GENERIC_LAMBDAS |
Generic (Polymorphic) Lambda Expressions.
SD-6 equivalent: __cpp_generic_lambdas >= 201304L. Note that __cpp_generic_lambdas has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP14_INIT_CAPTURES |
Generalized Lambda-capture changes.
SD-6 equivalent: __cpp_init_captures >= 201304L. Note that __cpp_init_captures has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP14_RETURN_TYPE_DEDUCTION |
Support for return type deduction for normal functions.
SD-6 equivalent: __cpp_return_type_deduction >= 201304L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP14_SIZED_DEALLOCATION |
Make available a global operator delete that takes a size argument.
SD-6 equivalent: __cpp_sized_deallocation >= 201309L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP14_VARIABLE_TEMPLATES |
Support for variable templates.
SD-6 equivalent: __cpp_variable_templates >= 201304L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP17_AGGREGATE_BASES |
Relax the restrictions on aggregate initialization.
SD-6 equivalent: __cpp_aggregate_bases >= 201603L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP17_ALIGNED_NEW |
Specify handling of dynamic memory allocation for over-aligned data.
SD-6 equivalent: __cpp_aligned_new >= 201606L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP17_ATTRIBUTE_FALLTHROUGH |
Indicate that a case within a switch statements falls through.
SD-6 equivalent: __has_cpp_attribute(fallthrough) >= 201603L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP17_ATTRIBUTE_MAYBE_UNUSED |
Indicate that a name or entity is possibly intentionally unused.
SD-6 equivalent: __has_cpp_attribute(maybe_unused) >= 201603L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP17_ATTRIBUTE_NODISCARD |
Indicate that a function return, class, or enum should not be ignored.
SD-6 equivalent: __has_cpp_attribute(nodiscard) >= 201603L. Note that __has_cpp_attribute(nodiscard) has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP17_CAPTURE_STAR_THIS |
Allow lambda capture of *this by value as as [=,*this].
SD-6 equivalent: __cpp_capture_star_this >= 201603L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP17_CONSTEXPR_LAMBDA |
Allow lambdas to be constexpr explicitly or implicitly.
SD-6 equivalent: __cpp_constexpr >= 201603L. Note that __cpp_constexpr has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP17_DEDUCTION_GUIDES |
Template argument deduction for class templates.
SD-6 equivalent: __cpp_deduction_guides >= 201606L. Note that __cpp_deduction_guides has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP17_DEDUCTION_GUIDES_DR |
Address additional class template argument deduction issues.
SD-6 equivalent: __cpp_deduction_guides >= 201703L. Note that __cpp_deduction_guides has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP17_DEDUCTION_GUIDES_NB |
Address issues that came up during C++17 balloting regarding class template argument deduction.
SD-6 equivalent: __cpp_deduction_guides >= 201611L. Note that __cpp_deduction_guides has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP17_ENUMERATOR_ATTRIBUTES |
Attributes for enumerators.
SD-6 equivalent: __cpp_enumerator_attributes >= 201411L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP17_FOLD_EXPRESSIONS |
Allow folding a template parameter pack over a binary operator.
SD-6 equivalent: __cpp_fold_expressions >= 201411L. Note that __cpp_fold_expressions has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP17_FOLD_EXPRESSIONS_REVISED |
Add support for unary folds and empty parameter packs to fold expressions.
SD-6 equivalent: __cpp_fold_expressions >= 201603L. Note that __cpp_fold_expressions has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP17_GUARANTEED_COPY_ELISION |
Guarantee copy and move elision in well-defined situations.
SD-6 equivalent: __cpp_guaranteed_copy_elision >= 201606L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP17_HEX_FLOAT |
Specify Hexadecimal float literals.
SD-6 equivalent: __cpp_hex_float >= 201603L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP17_IF_CONSTEXPR |
Allow constant expressions as if statements.
SD-6 equivalent: __cpp_if_constexpr >= 201606L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP17_INHERITING_CONSTRUCTORS_REVISED |
Address core issues raised by Inheriting Constructors.
SD-6 equivalent: __cpp_inheriting_constructors >= 201511L. Note that __cpp_inheriting_constructors has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP17_INLINE_VARIABLES |
inline variables
SD-6 equivalent: __cpp_inline_variables >= 201606L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP17_NAMESPACE_ATTRIBUTES |
Attributes for namespaces.
SD-6 equivalent: __cpp_namespace_attributes >= 201411L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP17_NOEXCEPT_FUNCTION_TYPE |
Make exception specifications be part of the type system.
SD-6 equivalent: __cpp_noexcept_function_type >= 201510L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP17_NONTYPE_TEMPLATE_ARGS |
Allow constant evaluation for all non-type template arguments.
SD-6 equivalent: __cpp_nontype_template_args >= 201411L. Note that __cpp_nontype_template_args has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP17_NONTYPE_TEMPLATE_PARAMETER_AUTO |
Allow declaring non-type template arguments with auto.
SD-6 equivalent: __cpp_nontype_template_parameter_auto >= 201606L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP17_RANGE_BASED_FOR_GENERALIZED |
Generalize range-based for-loops.
SD-6 equivalent: __cpp_range_based_for >= 201603L. Note that __cpp_range_based_for has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP17_STATIC_ASSERT_NO_MESSAGE |
Allow static assertions with no messages.
SD-6 equivalent: __cpp_static_assert >= 201411L. Note that __cpp_static_assert has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP17_STRUCTURED_BINDINGS |
Add support for multiple function return values and more.
SD-6 equivalent: __cpp_structured_bindings >= 201606L. Note that __cpp_structured_bindings has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP17_TEMPLATE_TEMPLATE_ARGS |
Resolve a defect in the matching of template arguments with template parameters.
SD-6 equivalent: __cpp_template_template_args >= 201611L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP17_VARIADIC_USING |
Add support for pack expansions in using-declarations.
SD-6 equivalent: __cpp_variadic_using >= 201611L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP20_AGGREGATE_PAREN_INIT |
Allow aggregate initialization from parentheses as well as braces.
SD-6 equivalent: __cpp_aggregate_paren_init >= 201902L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP20_ATTRIBUTE_LIKELY |
Add likely attribute for labels and statements.
SD-6 equivalent: __has_cpp_attribute(likely) >= 201803L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP20_ATTRIBUTE_NO_UNIQUE_ADDRESS |
Add language support for for empty objects.
SD-6 equivalent: __has_cpp_attribute(no_unique_address) >= 201803L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP20_ATTRIBUTE_NODISCARD_EXPANDED |
Add explanatory text to the nodiscard attribute and allow it on constructors.
SD-6 equivalent: __has_cpp_attribute(nodiscard) >= 201907L. Note that __has_cpp_attribute(nodiscard) has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_ATTRIBUTE_UNLIKELY |
Add unlikely attribute for labels and statements.
SD-6 equivalent: __has_cpp_attribute(unlikely) >= 201803L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP20_ATTRIBUTES_LIKELY_AND_UNLIKELY |
Aggregate tracking the availability of likely and unlikely attributes.
We track the availability of each attribute separately, as well as provide this aggregate to test for compliance. The aggregate’s value will be 0 if either attribute is unavailable, or 1 otherwise.
| #define LBAL_CPP20_CHAR8_T |
Add char8_t as a UTF-8 equivalent for char16_t and char32_t.
SD-6 equivalent: __cpp_char8_t >= 201811L. Note that __cpp_char8_t has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_CONCEPTS |
Incorporate the Concepts TS into the Standard.
SD-6 equivalent: __cpp_concepts >= 201707L. Note that __cpp_concepts has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_CONCEPTS_CONDITIONALLY_TRIVIAL_SPECIAL_MEMBER_FUNCTIONS |
Make special member functions conditionally trivial.
SD-6 equivalent: __cpp_concepts >= 202002L. Note that __cpp_concepts has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_CONCEPTS_REFINE_RETURN_TYPE_REQUIREMENTS |
Refine definition of return-type-requirements.
SD-6 equivalent: __cpp_concepts >= 201907L. Note that __cpp_concepts has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_CONCEPTS_RESPECIFY_RETURN_TYPE_REQUIREMENTS |
Refine definition of return-type-requirements.
SD-6 equivalent: __cpp_concepts >= 201811L. Note that __cpp_concepts has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_CONDITIONAL_EXPLICIT |
Support explicit (bool).
Allow simplification of templated constructors that have the potential to incorrectly convert their arguments.
SD-6 equivalent: __cpp_conditional_explicit >= 201806L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP20_CONSTEVAL |
Immediate functions.
SD-6 equivalent: __cpp_consteval >= 201811L. Note that __cpp_consteval has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_CONSTEXPR_CHANGE_ACTIVE_UNION_MEMBER |
Allow the active member of a union inside constexpr to change.
SD-6 equivalent: __cpp_constexpr >= 202002L. Note that __cpp_constexpr has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_CONSTEXPR_DYNAMIC_ALLOC |
Language support for variable-sized containers suitable for use in constexpr computations.
SD-6 equivalent: __cpp_constexpr_dynamic_alloc >= 201907L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP20_CONSTEXPR_DYNAMIC_POLYMORPHISM |
Allow dynamic_cast, polymorphic typeid in constexpr functions.
SD-6 equivalent: __cpp_constexpr >= 201811L. Note that __cpp_constexpr has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_CONSTEXPR_IN_DECLTYPE |
Address Core Issue regarding when constexpr functions are defined.
This has the effect of allowing constant expressions in decltype declarations.
SD-6 equivalent: __cpp_constexpr_in_decltype >= 201711L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP20_CONSTEXPR_INTRINSICS |
Permit unevaluated inline assembly in constexpr functions.
SD-6 equivalent: __cpp_constexpr >= 201907L. Note that __cpp_constexpr has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_CONSTEXPR_TRIVIAL_DEFAULT_INITIALIZATION |
Address an inconsistency in the lambda specification.
SD-6 equivalent: __cpp_constexpr >= 201907L. Note that __cpp_constexpr has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_CONSTEXPR_TRY_CATCH |
Permit unevaluated inline assembly in constexpr functions.
SD-6 equivalent: __cpp_constexpr >= 201811L. Note that __cpp_constexpr has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_CONSTEXPR_UNION_ALTERATION |
Allow changing the active member of a union inside constexpr.
SD-6 equivalent: __cpp_constexpr >= 201811L. Note that __cpp_constexpr has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_CONSTEXPR_VIRTUAL_FUNCTION |
Allow virtual function calls in constexpr functions.
SD-6 equivalent: __cpp_constexpr >= 201806L. Note that __cpp_constexpr has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_CONSTINIT |
Add the constinit keyword.
This keyword provides a decorator that can be used to ensure that initialization of a constant is actually occuring as expected, regardless of any changing (i.e., dialect-specific) rules that might be in play.
SD-6 equivalent: __cpp_constinit >= 201907L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP20_DEDUCTION_GUIDES_FOR_AGGREGATES |
Class template argument deduction for aggregates.
SD-6 equivalent: __cpp_deduction_guides >= 201907L. Note that __cpp_deduction_guides has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_DESIGNATED_INITIALIZERS |
Add designated initializers.
SD-6 equivalent: __cpp_designated_initializers >= 201707L. Note that __cpp_designated_initializers has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_DESTROYING_DELETE |
Efficient sized delete for variable sized classes.
SD-6 equivalent: __cpp_impl_destroying_delete >= 201806L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP20_GENERIC_LAMBDAS_TEMPLATE_PARAMETER_LIST |
Generic (Polymorphic) Lambda Expressions.
SD-6 equivalent: __cpp_generic_lambdas >= 201707L. Note that __cpp_generic_lambdas has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_IMPL_COROUTINE |
Add necessary language support for the <coroutine> library feature.
SD-6 equivalent: __cpp_impl_coroutine >= 201902L. Note that __cpp_impl_coroutine has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_INIT_CAPTURES_PACK_EXPANSION |
Allow pack-expansion in lambda init-capture.
SD-6 equivalent: __cpp_init_captures >= 201803L. Note that __cpp_init_captures has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_INTEGRATING_OUR_FEATURE_TEST_MACROS |
Integrate universal feature test macros into the Standard.
| #define LBAL_CPP20_MODULES |
Incorporate modules.
SD-6 equivalent: __cpp_modules >= 201907L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP20_NONTYPE_TEMPLATE_ARGS_FIXES |
Address inconsistencies in handling of non-type template arguments.
SD-6 equivalent: __cpp_nontype_template_args >= 201911L. Note that __cpp_nontype_template_args has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_NONTYPE_TEMPLATE_PARAMETER_CLASS |
Class Types in Non-Type Template Parameters.
SD-6 equivalent: __cpp_nontype_template_parameter_class >= 201806L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP20_THREE_WAY_COMPARISON_OPERATOR |
This is the original three-way comparison operator.
SD-6 equivalent: __cpp_impl_three_way_comparison >= 201711L. Note that __cpp_impl_three_way_comparison has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_THREE_WAY_COMPARISON_OPERATOR_EQUALITY_FIX |
This is the original three-way comparison operator.
SD-6 equivalent: __cpp_impl_three_way_comparison >= 201902L. Note that __cpp_impl_three_way_comparison has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_THREE_WAY_COMPARISON_OPERATOR_TUNEUP |
This is the updated three-way comparison operator.
SD-6 equivalent: __cpp_impl_three_way_comparison >= 201907L. Note that __cpp_impl_three_way_comparison has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP20_USING_ENUM |
Specify using aliases for enums.
SD-6 equivalent: __cpp_using_enum >= 201907L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP20_VA_OPT |
Provide a smarter predefined macro equivalent to VA__ARGS.
This behaves similarly to Microsoft’s old “broken” C preprocessor implementation in regards to variadic macro handling, in that [0..n] arguments are allowed rather than [1..n], with any extraneous comma being dropped.
| #define LBAL_CPP23_ATTRIBUTE_ASSUME |
Optimization hint to indicate an expression is true.
SD-6 equivalent: __has_cpp_attribute(assume) >= 202207L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP23_AUTO_CAST |
auto(x): decay-copy in the language
SD-6 equivalent: __cpp_auto_cast >= 202110L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP23_CHAR8_T_COMPATIBILITY |
char8_t Compatibility and Portability Fix
SD-6 equivalent: __cpp_char8_t >= 202207L. Note that __cpp_char8_t has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP23_CONSTEVAL_PROPAGATE_UP |
consteval needs to propagate up
SD-6 equivalent: __cpp_consteval >= 202211L. Note that __cpp_consteval has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP23_CONSTEXPR_NON_LITERAL_VARIABLES |
Allow non-literal variables, labels, and gotos in constexpr functions.
SD-6 equivalent: __cpp_constexpr >= 202110L. Note that __cpp_constexpr has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP23_CONSTEXPR_PERMIT_STATIC_CONSTEXPR |
Permit static constexpr variables in constexpr functions.
SD-6 equivalent: __cpp_constexpr >= 202211L. Note that __cpp_constexpr has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP23_CONSTEXPR_RELAX_RESTRICTIONS |
Relax some constexpr restrictions.
SD-6 equivalent: __cpp_constexpr >= 202207L. Note that __cpp_constexpr has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP23_DEDUCTION_GUIDES_FROM_INHERITED_CONSTRUCTORS |
Allow class template argument deduction from inherited constructors.
SD-6 equivalent: __cpp_deduction_guides >= 202207L. Note that __cpp_deduction_guides has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP23_EXPLICIT_THIS_PARAMETER |
Deduce this.
SD-6 equivalent: __cpp_explicit_this_parameter >= 202110L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP23_IF_CONSTEVAL |
if consteval
SD-6 equivalent: __cpp_if_consteval >= 202106L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP23_IMPLICIT_MOVE |
Simpler implicit move.
SD-6 equivalent: __cpp_implicit_move >= 202207L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP23_MULTIDIMENSIONAL_SUBSCRIPT |
Add a multidimensional subscript operator.
SD-6 equivalent: __cpp_multidimensional_subscript >= 202110L. Note that __cpp_multidimensional_subscript has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP23_MULTIDIMENSIONAL_SUBSCRIPT_STATIC |
static operator []
SD-6 equivalent: __cpp_multidimensional_subscript >= 202211L. Note that __cpp_multidimensional_subscript has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP23_NAMED_CHARACTER_ESCAPES |
Add named universal character escapes.
SD-6 equivalent: __cpp_named_character_escapes >= 202207L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP23_RANGE_BASED_FOR_TEMPORARIES |
Allow some temporaries in range-based for-loops.
SD-6 equivalent: __cpp_range_based_for >= 202211L. Note that __cpp_range_based_for has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP23_SIZE_T_SUFFIX |
Add literal suffixes for (signed) size_t.
SD-6 equivalent: __cpp_size_t_suffix >= 202011L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP23_STATIC_CALL_OPERATOR |
Static operator ().
SD-6 equivalent: __cpp_static_call_operator >= 202207L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP26_ATTRIBUTE_INDETERMINATE |
Erroneous behaviour for uninitialized reads.
SD-6 equivalent: __has_cpp_attribute(indeterminate) >= 202403L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP26_CONSTEXPR_CAST_FROM_VOID_STAR |
All constexpr cast from void *.
SD-6 equivalent: __cpp_constexpr >= 202306L. Note that __cpp_constexpr has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP26_CONSTEXPR_EXCEPTIONS |
Allow exception throwing in constant-evaluation.
SD-6 equivalent: __cpp_constexpr_exceptions >= 202411L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP26_CONSTEXPR_PLACEMENT_NEW |
Add constexpr placement new.
SD-6 equivalent: __cpp_constexpr >= 202406L. Note that __cpp_constexpr has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP26_CONSTEXPR_VIRTUAL_INHERITANCE |
Allow exception throwing in constant-evaluation.
SD-6 equivalent: __cpp_constexpr_virtual_inheritance >= 202506L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP26_CONTRACTS |
Contracts for C++.
SD-6 equivalent: __cpp_contracts >= 202502L. Note that __cpp_contracts has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP26_DELETED_FUNCTION |
= delete(\should have a reason\).
SD-6 equivalent: __cpp_deleted_function >= 202403L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP26_EXPANSION_STATEMENTS |
Expansion statements.
SD-6 equivalent: __cpp_expansion_statements >= 202506L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP26_IMPL_REFLECTION |
Reflection for C++26.
SD-6 equivalent: __cpp_impl_reflection >= 202506L. Note that __cpp_impl_reflection has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP26_IMPL_REFLECTION_CLEANUP |
Miscellaneous Reflection Cleanup.
SD-6 equivalent: __cpp_impl_reflection >= 202603L. Note that __cpp_impl_reflection has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP26_PACK_INDEXING |
Pack Indexing.
SD-6 equivalent: __cpp_pack_indexing >= 202311L. Note that __cpp_pack_indexing has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP26_PLACEHOLDER_VARIABLES |
Add placeholder variables (aka underscore, underbar, low line).
SD-6 equivalent: __cpp_placeholder_variables >= 202306L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP26_PP_EMBED |
#embed - a scannable, tooling-friendly binary resource inclusion mechanism
SD-6 equivalent: __cpp_pp_embed >= 202502L. Note that __cpp_pp_embed has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP26_STATIC_ASSERT_USER_MESSAGE |
Allow static assertions with user-generated messages.
SD-6 equivalent: __cpp_static_assert >= 202306L. Note that __cpp_static_assert has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP26_STRUCTURED_BINDINGS_ATTRIBUTES |
Allow attributes for Structured Bindings.
SD-6 equivalent: __cpp_structured_bindings >= 202403L. Note that __cpp_structured_bindings has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP26_STRUCTURED_BINDINGS_PACK |
Structured Bindings can introduce a Pack.
SD-6 equivalent: __cpp_structured_bindings >= 202403L. Note that __cpp_structured_bindings has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP26_TEMPLATE_PARAMETERS |
Allow concept and variable-template template-parameters.
SD-6 equivalent: __cpp_template_parameters >= 202502L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP26_TRIVIAL_UNION |
Allow trivial unions.
SD-6 equivalent: __cpp_trivial_union >= 202502L. Note that __cpp_trivial_union has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP26_TRIVIAL_UNION_LIFETIME |
Adjustments to union Lifetime Rules.
SD-6 equivalent: __cpp_trivial_union >= 202603L. Note that __cpp_trivial_union has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP26_VARIADIC_FRIEND |
Support variadic friends.
SD-6 equivalent: __cpp_variadic_friend >= 202403L. This token will have a value of 0 if the proposal described here is not supported.
| #define LBAL_CPP2D_CONCEPTS_CONDITIONAL_NOEXCEPT |
Conditional noexcept specifiers in compound requirements.
SD-6 equivalent: __cpp_concepts >= 202606L. Note that __cpp_concepts has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP2D_CONSTEVAL_ONLY |
consteval-only Values for C++26
SD-6 equivalent: __cpp_consteval >= 202606L. Note that __cpp_consteval has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP2D_CONTRACTS_VIRTUAL |
Contracts for C++: Virtual functions.
SD-6 equivalent: __cpp_contracts >= 202606L. Note that __cpp_contracts has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP2D_DESIGNATED_INITIALIZERS_BASE_CLASSES |
Designated-initializers for Base Classes.
SD-6 equivalent: __cpp_designated_initializers >= 202606L. Note that __cpp_designated_initializers has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP2D_IMPL_COROUTINE_RETURN |
return_value & return_void Are Not Mutually Exclusive
SD-6 equivalent: __cpp_impl_coroutine >= 202606L. Note that __cpp_impl_coroutine has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP2D_PACK_INDEXING_TEMPLATE_NAMES |
Pack Indexing for Template Names.
SD-6 equivalent: __cpp_pack_indexing >= 202606L. Note that __cpp_pack_indexing has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.
| #define LBAL_CPP2D_PP_EMBED_OFFSET |
#embed offset parameter
SD-6 equivalent: __cpp_pp_embed >= 202606L. Note that __cpp_pp_embed has multiple values associated with it from a number of different proposals, so this token will have the value of the latest supported proposal, or 0 if the proposal described here is not supported.