lucenaBAL 3.0.0
Lucena Build Abstraction Library for C++
Loading...
Searching...
No Matches
Standard Library Features

Provides feature detection describing the capabilities of the Standard Library implementation. More...

Collaboration diagram for Standard Library Features:

LBAL_LIBCPP14

C++14 features described here track the corresponding SD-6 macros, which are not as comprehensive as those for more recent Standards. More C++14 Library features can be tracked as needed.

#define LBAL_LIBCPP14_CHRONO_UDLS
 User-defined Literals for <chrono> types.
#define LBAL_LIBCPP14_COMPLEX_UDLS
 User-defined Literals for <complex>.
#define LBAL_LIBCPP14_EXCHANGE_FUNCTION
 Add std::exchange utility function.
#define LBAL_LIBCPP14_GENERIC_ASSOCIATIVE_LOOKUP
 Add heterogeneous comparison lookup to associative containers.
#define LBAL_LIBCPP14_INTEGER_SEQUENCE
 Add template-based integer sequences.
#define LBAL_LIBCPP14_INTEGRAL_CONSTANT_CALLABLE
 Add constexpr operator-() to std::integral_constant.
#define LBAL_LIBCPP14_IS_FINAL
 Detect finalized classes.
#define LBAL_LIBCPP14_IS_NULL_POINTER
 Detect null pointers.
#define LBAL_LIBCPP14_MAKE_REVERSE_ITERATOR
 std::make_reverse_iterator
#define LBAL_LIBCPP14_MAKE_UNIQUE
 std::make_unique
#define LBAL_LIBCPP14_NULL_ITERATORS
 Allow value-initialized forward iterators to be compared.
#define LBAL_LIBCPP14_QUOTED_STRING_IO
 Add quoted-string sream i/o manipulator.
#define LBAL_LIBCPP14_RESULT_OF_SFINAE
 Make std::result_of SFINAE-friendly.
#define LBAL_LIBCPP14_ROBUST_NONMODIFYING_SEQ_OPS
 Make non-modifying sequence operations more robust.
#define LBAL_LIBCPP14_SHARED_TIMED_MUTEX
 Rename std::shared_mutex to std::shared_timed_mutex.
#define LBAL_LIBCPP14_STRING_UDLS
 Predefine UDLs for strings.
#define LBAL_LIBCPP14_TRANSFORMATION_TRAIT_ALIASES
 Provide type aliases for transformation traits.
#define LBAL_LIBCPP14_TRANSPARENT_OPERATORS
 Allow heterogeneous arguments to operator functors and template their function call operators.
#define LBAL_LIBCPP14_TUPLES_BY_TYPE
 Allow addressing std::tuples by type.
#define LBAL_LIBCPP14_TUPLE_ELEMENT_T
 Add std::tuple element_t type alias.

LBAL_LIBCPP17

A large number of C++17 Standard Library features are not available in the implementations bundled with otherwise-conforming C++17 compilers. Additionally, sometimes support is simply broken or has surprising limitations, presenting further challenges. Here we track and document all such situations we’re aware of.

#define LBAL_LIBCPP17_ADDRESSOF_CONSTEXPR
 Make std::addressof constexpr, as per defect report.
#define LBAL_LIBCPP17_ALLOCATOR_TRAITS_IS_ALWAYS_EQUAL
 Clean up noexcept usage (Rev 3).
#define LBAL_LIBCPP17_ANY
 <any> components from Library Fundamentals V1 TS
#define LBAL_LIBCPP17_ANY_INTERFACE
 Impose homogeneous interface for std::variant, std::any and std::optional (Rev 3).
#define LBAL_LIBCPP17_APPLY
 std::apply component from Library Fundamentals V1 TS
#define LBAL_LIBCPP17_ARRAY_CONSTEXPR
 Add constexpr modifiers to std::reverse_iterator, std::move_iterator, <array> and Range Access types.
#define LBAL_LIBCPP17_AS_CONST
 Add std::as_const helper function template.
#define LBAL_LIBCPP17_ATOMIC_IS_ALWAYS_LOCK_FREE
 Add constexpr atomic<T>::is_always_lock_free.
#define LBAL_LIBCPP17_BOOL_CONSTANT
 Introduce std::bool_constant.
#define LBAL_LIBCPP17_BOYER_MOORE_SEARCHER
 Add text search components from Library Fundamentals V1 TS.
#define LBAL_LIBCPP17_BYTE
 Define std::byte type.
#define LBAL_LIBCPP17_CHRONO
 Rounding and abs fixes for <chrono>.
#define LBAL_LIBCPP17_CHRONO_CONSTEXPR
 Add constexpr to certain <chrono> functions.
#define LBAL_LIBCPP17_CLAMP
 Standard clamping algorithm.
#define LBAL_LIBCPP17_CONSTEXPR_STRING
 Make std::char_traits constexpr.
#define LBAL_LIBCPP17_CONSTEXPR_STRING_VIEW
 Make std::char_traits constexpr.
#define LBAL_LIBCPP17_DEDUCTION_GUIDES
 Toward a resolution of US7 and US14: Integrating template deduction for class templates into the standard library.
#define LBAL_LIBCPP17_ENABLE_SHARED_FROM_THIS
 Re-enable std::shared_from_this.
#define LBAL_LIBCPP17_EXECUTION
 Add Library components of the Parallelism TS.
#define LBAL_LIBCPP17_FILESYSTEM
 Adopt File System TS.
#define LBAL_LIBCPP17_FILESYSTEM_DIRECTORY_ENTRY_CACHING
 Add directory entry caching to <filesystem>.
#define LBAL_LIBCPP17_FILESYSTEM_EXP
 Experimental implementation of the Filesystem TS.
#define LBAL_LIBCPP17_FILESYSTEM_PATHS_EXPANDED
 Add relative path and std::string_view support to <filesystem>.
#define LBAL_LIBCPP17_FILESYSTEM_RELATIVE_PATHS
 Relative Paths for Filesystem.
#define LBAL_LIBCPP17_GCD_LCM
 Add std::gcd and std::lcm.
#define LBAL_LIBCPP17_HARDWARE_INTERFERENCE_SIZE
 Provide relevant cache line sizes for construction and destruction.
#define LBAL_LIBCPP17_HAS_UNIQUE_OBJECT_REPRESENTATIONS
 Add std::has_unique_object_representations.
#define LBAL_LIBCPP17_HYPOT
 Introduce a 3-argument overload to std::hypot.
#define LBAL_LIBCPP17_INCOMPLETE_CONTAINER_ELEMENTS
 Introduce minimal incomplete type support for Standard containers.
#define LBAL_LIBCPP17_INVOKE
 Add std::invoke function template.
#define LBAL_LIBCPP17_IS_AGGREGATE
 Add std::is_aggregate type trait.
#define LBAL_LIBCPP17_IS_INVOCABLE
 Add std::is_invocable type trait to replace is_callable.
#define LBAL_LIBCPP17_IS_SWAPPABLE
 Add std::is_swappable type trait family.
#define LBAL_LIBCPP17_LAUNDER
 Replacement of class objects containing reference members.
#define LBAL_LIBCPP17_LOGICAL_TRAITS
 Provide type traits for performing logical operations.
#define LBAL_LIBCPP17_MAKE_FROM_TUPLE
 Introduce std::make_from_tuple to unpack a tuple into arguments.
#define LBAL_LIBCPP17_MAP_TRY_EMPLACE
 Improve insertion into std::map.
#define LBAL_LIBCPP17_MATH_SPECIAL_FUNCTIONS
 Incorporate math functions specified in IS 29124:2010.
#define LBAL_LIBCPP17_MEMORY_RESOURCE
 Incorporate memory management components from Library Fundamentals V1 TS.
#define LBAL_LIBCPP17_NODE_EXTRACT
 Add splicing to associative containers.
#define LBAL_LIBCPP17_NONMEMBER_CONTAINER_ACCESS
 Incorporate non-member functions into Standard container class interfaces.
#define LBAL_LIBCPP17_NOT_FN
 Add std::not_fn.
#define LBAL_LIBCPP17_OPTIONAL
 Add std::optional.
#define LBAL_LIBCPP17_OPTIONAL_GREATER_EQUAL
 Homogenize std::optional interface with std::any and std::variant.
#define LBAL_LIBCPP17_OPTIONAL_INTERFACE
 Homogenize std::optional interface with std::any and std::variant.
#define LBAL_LIBCPP17_PARALLEL_ALGORITHM
 Standardize the Parallelism TS.
#define LBAL_LIBCPP17_RAW_MEMORY_ALGORITHMS
 Supply tools for raw memory management.
#define LBAL_LIBCPP17_SAMPLE
 Adopt std::sample from the Library Fundamentals V1 TS.
#define LBAL_LIBCPP17_SCOPED_LOCK
 Add a variadic variant of std::lock_guard under a new name.
#define LBAL_LIBCPP17_SHARED_MUTEX
 Officially change std::shared_mutex to an untimed mutex.
#define LBAL_LIBCPP17_SHARED_PTR_ARRAYS
 Fix std::shared_ptr support for arrays.
#define LBAL_LIBCPP17_SHARED_PTR_WEAK_TYPE
 Add shared_ptr::weak_type.
#define LBAL_LIBCPP17_STANDARDIZATION_OF_PARALLELISM_TS
 Track full compliance with the Parallelism Standard.
#define LBAL_LIBCPP17_STRING_VIEW
 Adopt std::string_view from the Library Fundamentals V1 TS.
#define LBAL_LIBCPP17_STRING_VIEW_INTERFACE
 Address interface inversion between <string> and <string_view>.
#define LBAL_LIBCPP17_TO_CHARS
 Elementary string conversions, revision 5.
#define LBAL_LIBCPP17_TO_CHARS_FP
 Floating-point compliance with Elementary string conversions.
#define LBAL_LIBCPP17_TO_CHARS_INTEGER
 Integer compliance with Elementary string conversions.
#define LBAL_LIBCPP17_TRANSPARENT_OPERATORS
 Make std::owner_less more flexible.
#define LBAL_LIBCPP17_TYPE_TRAIT_VARIABLE_TEMPLATES
 Adopt variable templates for type traits from the Library Fundamentals V1 TS.
#define LBAL_LIBCPP17_UNCAUGHT_EXCEPTIONS
 Add std::uncaught_exceptions.
#define LBAL_LIBCPP17_UNORDERED_MAP_TRY_EMPLACE
 Improve insertion into std::unordered_map.
#define LBAL_LIBCPP17_VARIANT
 Add std::variant.
#define LBAL_LIBCPP17_VOID_T
 Add std::void_t as a transformation type trait.

LBAL_LIBCPP20

These are all taken from features that have been incorporated into the C++20 Standard.

#define LBAL_LIBCPP20_ARRAY_CONSTEXPR_COMPARISONS
 Provide constexpr comparison operators for std::array.
#define LBAL_LIBCPP20_ARRAY_CONSTEXPR_ITERATOR
 Define requirements for constexpr iterators.
#define LBAL_LIBCPP20_ARRAY_CONSTEXPR_UTILITIES
 Provide constexpr std::array swap and fill.
#define LBAL_LIBCPP20_ASSUME_ALIGNED
 Provide std::assume_aligned compiler hint utility function Library.
#define LBAL_LIBCPP20_ATOMIC_FLAG_TEST
 Add atomic_flag::test components of the C++20 Synchronization Library.
#define LBAL_LIBCPP20_ATOMIC_FLOAT
 Extend <atomic> support to floating point types.
#define LBAL_LIBCPP20_ATOMIC_LOCK_FREE_TYPE_ALIASES
 Add atomic lockfree type aliases from the C++20 Synchronization.
#define LBAL_LIBCPP20_ATOMIC_REF
 Allow atomic operations to apply to non-atomic objects.
#define LBAL_LIBCPP20_ATOMIC_SHARED_PTR
 Fixes for atomic std::shared_ptr and std::weak_ptr.
#define LBAL_LIBCPP20_ATOMIC_VALUE_INITIALIZATION
 Eliminate the surprising value-initialization behavior of std::atomic.
#define LBAL_LIBCPP20_ATOMIC_WAIT
 Add atomic wait components of the C++20 Synchronization Library.
#define LBAL_LIBCPP20_BARRIER
 Add std::barrier components of the C++20 Synchronization Library.
#define LBAL_LIBCPP20_BIND_FRONT
 Introduce std::bind_front to supersede std::bind.
#define LBAL_LIBCPP20_BIND_FRONT_NO_UNWRAP
 Prevent std::bind_front from unwrapping std::reference_wrapper.
#define LBAL_LIBCPP20_BITOPS
 Introduce support for hardware-level bit operations.
#define LBAL_LIBCPP20_BIT_CAST
 Introduce robust casts between bit-compatible types.
#define LBAL_LIBCPP20_BOUNDED_ARRAY_TRAITS
 Introduce traits to distinguish between bounded and unbounded arrays.
#define LBAL_LIBCPP20_CHAR8_T
 Define char8_t as the base type for UTF-8 encodings (Rev 6).
#define LBAL_LIBCPP20_CHAR8_T_COMPAT
 Fix backward compatibility issues introduced by char8_t.
#define LBAL_LIBCPP20_CHRONO_CALENDAR
 Add support for Calendars and Time Zones to <chrono>.
#define LBAL_LIBCPP20_CHRONO_FIXES
 Miscellaneous minor fixes for <chrono>.
#define LBAL_LIBCPP20_CONCEPTS
 Standard Library Concepts.
#define LBAL_LIBCPP20_CONCEPTS_BOOLEAN_TESTABLE
 Wording for boolean-testable.
#define LBAL_LIBCPP20_CONCEPTS_EXP
 Experimental version of Standard Library Concepts.
#define LBAL_LIBCPP20_CONCEPTS_STANDARD_CASE
 Rename C++ Concepts to use standard_case.
#define LBAL_LIBCPP20_CONSTEXPR_ALGORITHMS
 Add constexpr to <algorithm> and <utility> functions.
#define LBAL_LIBCPP20_CONSTEXPR_ALGORITHMS_SWAP
 Add constexpr to std::swap and related functions.
#define LBAL_LIBCPP20_CONSTEXPR_COMPLEX
 Add more constexpr support to <complex>.
#define LBAL_LIBCPP20_CONSTEXPR_DYNAMIC_ALLOC
 Add constexpr memory allocators used by dynamic containers.
#define LBAL_LIBCPP20_CONSTEXPR_FUNCTIONAL
 Make more of <functional> constexpr.
#define LBAL_LIBCPP20_CONSTEXPR_FUNCTIONAL_INVOKE
 Make std::invoke constexpr.
#define LBAL_LIBCPP20_CONSTEXPR_ITERATOR
 Make more of <iterator> constexpr.
#define LBAL_LIBCPP20_CONSTEXPR_MEMORY
 Make std::pointer_traits constexpr.
#define LBAL_LIBCPP20_CONSTEXPR_NUMERIC
 Make numeric algorithms constexpr.
#define LBAL_LIBCPP20_CONSTEXPR_STRING
 Make std::string constexpr.
#define LBAL_LIBCPP20_CONSTEXPR_STRING_PARTIAL
 Make parts of std::string constexpr.
#define LBAL_LIBCPP20_CONSTEXPR_STRING_VIEW
 Make more of <string_view> constexpr.
#define LBAL_LIBCPP20_CONSTEXPR_TUPLE
 Make more of <tuple> constexpr.
#define LBAL_LIBCPP20_CONSTEXPR_UTILITY
 Make more of <tuple> constexpr.
#define LBAL_LIBCPP20_CONSTEXPR_VECTOR
 Make std::vector constexpr.
#define LBAL_LIBCPP20_COROUTINE
 Standard Library coroutines.
#define LBAL_LIBCPP20_COROUTINE_EXP
 Experimental Standard Library coroutines.
#define LBAL_LIBCPP20_DESTROYING_DELETE
 Efficient sized delete for variable-sized classes.
#define LBAL_LIBCPP20_ENDIAN
 Add std::endian enum.
#define LBAL_LIBCPP20_ENDIAN_BIT
 Relocate std::endian to <bit>.
#define LBAL_LIBCPP20_ERASE_IF
 Adopt consistent container erasure.
#define LBAL_LIBCPP20_ERASE_IF_FREE_FUNCTIONS
 Update erase_if free function return types.
#define LBAL_LIBCPP20_EXECUTION_VECTORIZATION
 Add target vectorization policies from the Parallelism V2 TS.
#define LBAL_LIBCPP20_FORMAT
 Add text formatting functionality to properly replace printf.
#define LBAL_LIBCPP20_GENERIC_UNORDERED_HASH_LOOKUP
 The feature was removed prior to Standardization.
#define LBAL_LIBCPP20_GENERIC_UNORDERED_LOOKUP
 Heterogeneous lookup for unordered containers.
#define LBAL_LIBCPP20_INTEGER_COMPARISON_FUNCTIONS
 Add Safe integral comparisons.
#define LBAL_LIBCPP20_INTERPOLATE
 Add well-behaved interpolation for numbers and pointers.
#define LBAL_LIBCPP20_INT_POW2
 Integral power-of-2 operations.
#define LBAL_LIBCPP20_INT_POW2_FUNCTION_RENAME
 Rename the assorted bit-manipulation fucntions.
#define LBAL_LIBCPP20_IS_CONSTANT_EVALUATED
 Add std::is_constant_evaluated type trait.
#define LBAL_LIBCPP20_IS_LAYOUT_COMPATIBLE
 Add std::is_layout_compatible type trait.
#define LBAL_LIBCPP20_IS_NOTHROW_CONVERTIBLE
 Add std::is_nothrow_convertible type trait.
#define LBAL_LIBCPP20_IS_POINTER_INTERCONVERTIBLE
 Add std::is_pointer_interconvertible type trait.
#define LBAL_LIBCPP20_JTHREAD
 Add a cooperatively interruptible joining thread.
#define LBAL_LIBCPP20_JTHREAD_CV
 Simplify condition variable API.
#define LBAL_LIBCPP20_LATCH
 Incorporate std::latch from the C++20 Synchronization Library.
#define LBAL_LIBCPP20_LIST_REMOVE_RETURN_TYPE
 Improve the return value of erase-like algorithms.
#define LBAL_LIBCPP20_MATH_CONSTANTS
 Add common math constants to the C++ Standard.
#define LBAL_LIBCPP20_POLYMORPHIC_ALLOCATOR
 Provide a default template argument for std::polymorphic_allocator.
#define LBAL_LIBCPP20_RANGES
 Incorporate ranges into the C++ Standard.
#define LBAL_LIBCPP20_RANGES_INPUT_ADAPTORS
 Add input range adaptors.
#define LBAL_LIBCPP20_RANGES_LOOSENED_COMPARE
 Loosen the constraints on range-based compare algorithms.
#define LBAL_LIBCPP20_REMOVE_CVREF
 Add std::remove_cvref type trait.
#define LBAL_LIBCPP20_SEMAPHORE
 Incorporate std::semaphore from the C++20 Synchronization Library.
#define LBAL_LIBCPP20_SHARED_PTR_ARRAYS
 Extend std::make_shared to support C-style arrays.
#define LBAL_LIBCPP20_SHIFT
 Add std::shift_left and std::shift_right.
#define LBAL_LIBCPP20_SMART_PTR_FOR_OVERWRITE
 Support smart pointer creation with default initialization.
#define LBAL_LIBCPP20_SOURCE_LOCATION
 Adopt std::source_location from the Library Fundamentals V3 TS.
#define LBAL_LIBCPP20_SPAN
 Add std::span.
#define LBAL_LIBCPP20_SPAN_FIXED_SIZE
 Fix constructing a fixed-size std::span from a dynamic range.
#define LBAL_LIBCPP20_SPAN_USABILITY
 Enhance usability for std::span.
#define LBAL_LIBCPP20_SSIZE
 Add std::ssize and fix std::span’s size return values.
#define LBAL_LIBCPP20_STARTS_ENDS_WITH
 Add string prefix- and suffix-checking.
#define LBAL_LIBCPP20_STRING_VIEW_CONSTEXPR_ITERATOR
 Add support for constexpr iterators to <string_view>.
#define LBAL_LIBCPP20_SYNCBUF
 Add synchronized buffered output streams.
#define LBAL_LIBCPP20_SYNCBUF_MANIPULATORS
 Add manipulators for synchronized buffered output streams.
#define LBAL_LIBCPP20_THREE_WAY_COMPARISON
 Add <compare> to the Standard Library.
#define LBAL_LIBCPP20_THREE_WAY_COMPARISON_LIBRARY
 Add three-way comparison support to the Standard Library.
#define LBAL_LIBCPP20_TO_ADDRESS
 Provide a utility to convert a pointer to a raw pointer.
#define LBAL_LIBCPP20_TO_ARRAY
 Adopt std::to_array from the Library Fundamentals TS.
#define LBAL_LIBCPP20_TYPE_IDENTITY
 Add the std::identity metafunction.
#define LBAL_LIBCPP20_UNWRAP_REF
 Add std::unwrap_reference and std::unwrap_ref_decay.
#define LBAL_LIBCPP20_VERSION
 Identifies whether <version> is present and include-able given the current C++ Standard dialect in use.

LBAL_LIBCPP23

These are all taken from features that have been incorporated into the C++23 Standard.

#define LBAL_LIBCPP23_ADAPTOR_ITERATOR_PAIR_CONSTRUCTOR
 Iterators pair constructors for stack and queue.
#define LBAL_LIBCPP23_ALGORITHM_ITERATOR_REQUIREMENTS
 Ranges iterators as inputs to non-Ranges algorithms.
#define LBAL_LIBCPP23_ALLOCATE_AT_LEAST
 Provide size feedback in the Allocator interface.
#define LBAL_LIBCPP23_ALLOCATE_AT_LEAST_DISALLOW_USER_SPEC
 Disallow user specialization of allocator_traits.
#define LBAL_LIBCPP23_ASSOCIATIVE_HETEROGENEOUS_ERASURE
 Heterogeneous erasure overloads for associative containers.
#define LBAL_LIBCPP23_BARRIER_RELAXED_COMPLETION
 Relax std::barrier phase completion step guarantees.
#define LBAL_LIBCPP23_BIND_BACK
 Pipe support for user-defined range adaptors.
#define LBAL_LIBCPP23_BYTESWAP
 Byteswapping for fun&&nuf.
#define LBAL_LIBCPP23_COMMON_REFERENCE
 common_reference_t of reference_wrapper Should Be a Reference Type
#define LBAL_LIBCPP23_COMMON_REFERENCE_WRAPPER
 common_reference_t of reference_wrapper Should Be a Reference Type
#define LBAL_LIBCPP23_CONCEPTS_MOVE_ONLY
 Add move-only types for equality_comparable_with, totally_ordered_with, and three_way_comparable_with.
#define LBAL_LIBCPP23_CONSTEXPR_BITSET
 A more constexpr bitset.
#define LBAL_LIBCPP23_CONSTEXPR_CHARCONV
 Add Constexpr Modifiers to Functions to_chars and from_chars for Integral Types in Header.
#define LBAL_LIBCPP23_CONSTEXPR_CMATH
 constexpr for cmath and cstdlib
#define LBAL_LIBCPP23_CONSTEXPR_MEMORY_UNIQUE_PTR
 Make std::unique_ptr constexpr.
#define LBAL_LIBCPP23_CONSTEXPR_TYPEINFO
 Making std::type_info::operator== constexpr.
#define LBAL_LIBCPP23_CONTAINERS_RANGES
 Conversions from ranges to containers.
#define LBAL_LIBCPP23_EXPECTED
 std::expected
#define LBAL_LIBCPP23_EXPECTED_MONADIC
 Monadic Functions for std::expected.
#define LBAL_LIBCPP23_FLAT_MAP
 A Standard flat_map.
#define LBAL_LIBCPP23_FLAT_SET
 A Standard flat_set.
#define LBAL_LIBCPP23_FORMAT
 Add std::format improvements.
#define LBAL_LIBCPP23_FORMATTERS
 Formatting thread::id and stacktrace.
#define LBAL_LIBCPP23_FORMAT_BASIC_FORMAT_STRING
 Exposing std::basic_format_string.
#define LBAL_LIBCPP23_FORMAT_ENCODINGS
 Clarify encoding handling in localized formatting of <chrono> types.
#define LBAL_LIBCPP23_FORMAT_GENERATOR
 Add support for std::generator-like types to std::format.
#define LBAL_LIBCPP23_FORMAT_LOCALE
 Fix locale handling in std::chrono formatters.
#define LBAL_LIBCPP23_FORMAT_RANGES
 Formatting Ranges.
#define LBAL_LIBCPP23_FORWARD_LIKE
 forward_like
#define LBAL_LIBCPP23_GENERATOR
 std::generator: Synchronous Coroutine Generator for Ranges
#define LBAL_LIBCPP23_INVOKE_R
 invoke_r
#define LBAL_LIBCPP23_IOS_NOREPLACE
 Support exclusive mode for fstreams.
#define LBAL_LIBCPP23_IS_IMPLICIT_LIFETIME
 A trait for implicit lifetime types.
#define LBAL_LIBCPP23_IS_SCOPED_ENUM
 A proposal for a type trait to detect scoped enumerations.
#define LBAL_LIBCPP23_MDSPAN
 mdspan
#define LBAL_LIBCPP23_MODULES
 Standard Library Modules std and std.compat.
#define LBAL_LIBCPP23_MONADIC_OPTIONAL
 Add monadic operations for std::optional.
#define LBAL_LIBCPP23_MOVE_ITERATOR_CONCEPT
 move_iterator should be a random access iterator
#define LBAL_LIBCPP23_MOVE_ONLY_FUNCTION
 move_only_function (was any_invocable)
#define LBAL_LIBCPP23_OPTIONAL_CONSTEXPR
 Add further constexpr support for std::optional.
#define LBAL_LIBCPP23_OPTIONAL_MONADIC
 Add monadic operations for std::optional.
#define LBAL_LIBCPP23_OUT_PTR
 out_ptr - a scalable output pointer abstraction
#define LBAL_LIBCPP23_PRINT
 Formatted output.
#define LBAL_LIBCPP23_RANGES_AS_CONST
 cbegin should always return a constant iterator
#define LBAL_LIBCPP23_RANGES_AS_RVALUE
 views::as_rvalue
#define LBAL_LIBCPP23_RANGES_CARTESIAN_PRODUCT
 views::cartesian_product
#define LBAL_LIBCPP23_RANGES_CARTESIAN_PRODUCT_EMPTY
 Empty Product for certain Views.
#define LBAL_LIBCPP23_RANGES_CHUNK
 Windowing range adaptors: views::chunk and views::slide.
#define LBAL_LIBCPP23_RANGES_CHUNK_BY
 views::chunk_by
#define LBAL_LIBCPP23_RANGES_CONTAINS
 std::ranges::contains
#define LBAL_LIBCPP23_RANGES_ENUMERATE
 views::enumerate
#define LBAL_LIBCPP23_RANGES_FIND_LAST
 find_last
#define LBAL_LIBCPP23_RANGES_FOLD
 ranges::fold
#define LBAL_LIBCPP23_RANGES_FORMALIZED_VIEW
 What is a view?
#define LBAL_LIBCPP23_RANGES_IOTA
 ranges::iota, ranges::shift_left, and ranges::shift_right
#define LBAL_LIBCPP23_RANGES_JOIN_WITH
 views::join_with
#define LBAL_LIBCPP23_RANGES_NON_DEFAULT_CONSTRUCTIBLE
 Views should not be required to be default constructible.
#define LBAL_LIBCPP23_RANGES_RELAXED
 Relaxing Ranges Just A Smidge.
#define LBAL_LIBCPP23_RANGES_REMOVE_POISON_PILLS
 Poison Pills are Too Toxic.
#define LBAL_LIBCPP23_RANGES_REPEAT
 views::repeat
#define LBAL_LIBCPP23_RANGES_SLIDE
 Windowing range adaptors: views::chunk and views::slide.
#define LBAL_LIBCPP23_RANGES_STARTS_ENDS_WITH
 starts_with and ends_with
#define LBAL_LIBCPP23_RANGES_STRIDE
 stride_view
#define LBAL_LIBCPP23_RANGES_SUPPORT_MOVE_ONLY_TYPES
 Relaxing range adaptors to allow for move only types.
#define LBAL_LIBCPP23_RANGES_TO_CONTAINER
 Conversions from ranges to containers.
#define LBAL_LIBCPP23_RANGES_USER_ADAPTOR_PIPES
 Pipe support for user-defined range adaptors.
#define LBAL_LIBCPP23_RANGES_ZIP
 zip
#define LBAL_LIBCPP23_REFERENCE_FROM_TEMPORARY
 A type trait to detect reference binding to temporary.
#define LBAL_LIBCPP23_SHIFT_RANGES
 ranges::iota, ranges::shift_left, and ranges::shift_right
#define LBAL_LIBCPP23_SPANSTREAM
 A strstream replacement using span as buffer.
#define LBAL_LIBCPP23_STACKTRACE
 A Proposal to add stacktrace library.
#define LBAL_LIBCPP23_START_LIFETIME_AS
 Explicit lifetime management.
#define LBAL_LIBCPP23_STDATOMIC_H
 Support C atomics in C++.
#define LBAL_LIBCPP23_STRING_CONTAINS
 String Contains function.
#define LBAL_LIBCPP23_STRING_RESIZE_AND_OVERWRITE
 basic_string::resize_and_overwrite
#define LBAL_LIBCPP23_TO_UNDERLYING
 std::to_underlying
#define LBAL_LIBCPP23_TUPLE_LIKE
 Compatibility between tuple, pair and tuple-like objects.
#define LBAL_LIBCPP23_UNREACHABLE
 Function to mark unreachable code.
#define LBAL_LIBCPP23_VARIANT_CONSTEXPR
 Add further constexpr support for std::variant.
#define LBAL_LIBCPP23_VARIANT_INHERITANCE
 Address inheriting from std::variant.

LBAL_LIBCPP26

These are all taken from features that have been incorporated into the C++26 Standard.

#define LBAL_LIBCPP26_ALGORITHM_DEFAULT_VALUE_TYPE
 Adjoints to 'Enabling list-initialization for algorithms': find_last and uninitialized_fill.
#define LBAL_LIBCPP26_ALIGNED_ACCESSOR
 An mdspan accessor expressing pointer overalignment.
#define LBAL_LIBCPP26_ASSOCIATIVE_HETEROGENEOUS_INSERTION
 Extending associative containers with the remaining heterogeneous overloads.
#define LBAL_LIBCPP26_ATOMIC_MIN_MAX
 Atomic maximum/minimum.
#define LBAL_LIBCPP26_ATOMIC_MIN_MAX_FLOAT
 Atomic floating-point min/max.
#define LBAL_LIBCPP26_ATOMIC_REDUCTIONS
 Atomic Reduction Operations.
#define LBAL_LIBCPP26_ATOMIC_REF_ADDRESS
 Expose std::atomic_ref’s object address.
#define LBAL_LIBCPP26_ATOMIC_REF_SAFER_ADDRESS
 Safer atomic_ref::address.
#define LBAL_LIBCPP26_BIND_FRONT_NTTP_CALLABLES
 Bind front and back to NTTP callables.
#define LBAL_LIBCPP26_BITSET
 Interfacing bitset with string_view.
#define LBAL_LIBCPP26_CHRONO_HASHING
 Add hashing support for std::chrono value classes.
#define LBAL_LIBCPP26_CONSTANT_WRAPPER
 std::constexpr_wrapper
#define LBAL_LIBCPP26_CONSTANT_WRAPPER_UNWRAP_ON_CALL
 constant_wrapper should unwrap on call and subscript
#define LBAL_LIBCPP26_CONSTEXPR_ALGORITHMS_STABLE_SORT
 Add constexpr to std::swap and related functions.
#define LBAL_LIBCPP26_CONSTEXPR_ATOMIC
 constexpr atomic and atomic_ref
#define LBAL_LIBCPP26_CONSTEXPR_COMPLEX
 Add more constexpr support to <cmath> and <complex>.
#define LBAL_LIBCPP26_CONSTEXPR_DEQUE
 constexpr containers and adapters
#define LBAL_LIBCPP26_CONSTEXPR_EXCEPTIONS
 constexpr exception types
#define LBAL_LIBCPP26_CONSTEXPR_FLAT_MAP
 constexpr containers and adapters
#define LBAL_LIBCPP26_CONSTEXPR_FLAT_SET
 constexpr containers and adapters
#define LBAL_LIBCPP26_CONSTEXPR_FORMAT
 constexpr std::format
#define LBAL_LIBCPP26_CONSTEXPR_FORWARD_LIST
 constexpr containers and adapters
#define LBAL_LIBCPP26_CONSTEXPR_LIST
 constexpr containers and adapters
#define LBAL_LIBCPP26_CONSTEXPR_MAP
 constexpr containers and adapters
#define LBAL_LIBCPP26_CONSTEXPR_MEMORY_SHARED_PTR
 Make std::shared_ptr and friends constexpr.
#define LBAL_LIBCPP26_CONSTEXPR_QUEUE
 constexpr containers and adapters
#define LBAL_LIBCPP26_CONSTEXPR_SET
 constexpr containers and adapters
#define LBAL_LIBCPP26_CONSTEXPR_STACK
 constexpr containers and adapters
#define LBAL_LIBCPP26_CONSTEXPR_UNORDERED_MAP
 constexpr containers and adapters
#define LBAL_LIBCPP26_CONSTEXPR_UNORDERED_SET
 constexpr containers and adapters
#define LBAL_LIBCPP26_CONSTRAINED_EQUALITY
 Comparisons for reference_wrapper.
#define LBAL_LIBCPP26_CONSTRAINED_EQUALITY_EXPECTED
 Constrain std::expected equality operators.
#define LBAL_LIBCPP26_COPYABLE_FUNCTION
 copyable_function
#define LBAL_LIBCPP26_COUNTING_SCOPE
 async_scope — Creating scopes for non-sequential concurrency
#define LBAL_LIBCPP26_DEBUGGING
 Debugging Support.
#define LBAL_LIBCPP26_DEBUGGING_UTILITIES
 is_debugger_present is_replaceable
#define LBAL_LIBCPP26_DEFAULT_TEMPLATE_TYPE_FOR_ALGORITHM_VALUES
 Enabling list-initialization for algorithms.
#define LBAL_LIBCPP26_DEFINE_STATIC
 define_static_{string,object,array}
#define LBAL_LIBCPP26_EXCEPTION_PTR_CAST
 Observing exceptions stored in exception_ptr.
#define LBAL_LIBCPP26_EXCEPTION_PTR_CAST_BETTER_RETURN_TYPES
 Better return types in std::inplace_vector and std::exception_ptr_cast.
#define LBAL_LIBCPP26_EXCEPTION_PTR_CAST_CONSTEXPR
 Inspecting exception_ptr works should be constexpr.
#define LBAL_LIBCPP26_FLAT_MAP_FIXES
 flat_meow Fixes
#define LBAL_LIBCPP26_FLAT_SET_FIXES
 flat_meow Fixes
#define LBAL_LIBCPP26_FORMAT_MEMBER_VISIT
 Member visit.
#define LBAL_LIBCPP26_FORMAT_PATH
 Formatting of std::filesystem::path.
#define LBAL_LIBCPP26_FORMAT_PATH_FIXES
 Prevent path presentation problems.
#define LBAL_LIBCPP26_FORMAT_POINTERS
 Format pointers.
#define LBAL_LIBCPP26_FORMAT_RUNTIME
 Add runtime format strings.
#define LBAL_LIBCPP26_FORMAT_TYPE_CHECK
 Type check format args.
#define LBAL_LIBCPP26_FORMAT_UCHAR
 Fix formatting of code units as integers (Dude, where’s my char?).
#define LBAL_LIBCPP26_FREESTANDING_ALGORITHM
 Freestanding Library: Partial Classes.
#define LBAL_LIBCPP26_FREESTANDING_ALGORITHM_MORE
 Freestanding Library: algorithm, numeric, and random.
#define LBAL_LIBCPP26_FREESTANDING_ARRAY
 Freestanding Library: Partial Classes.
#define LBAL_LIBCPP26_FREESTANDING_CHARCONV
 Freestanding Library: Character primitives and the C library.
#define LBAL_LIBCPP26_FREESTANDING_CHAR_TRAITS
 Freestanding Library: Character primitives and the C library.
#define LBAL_LIBCPP26_FREESTANDING_CSTDLIB
 Freestanding Library: Character primitives and the C library.
#define LBAL_LIBCPP26_FREESTANDING_CSTRING
 Freestanding Library: Character primitives and the C library.
#define LBAL_LIBCPP26_FREESTANDING_CSTRING_REMOVE_STRTOK
 Freestanding: Remove strtok.
#define LBAL_LIBCPP26_FREESTANDING_CWCHAR
 Freestanding Library: Character primitives and the C library.
#define LBAL_LIBCPP26_FREESTANDING_ERRC
 Freestanding Library: Character primitives and the C library.
#define LBAL_LIBCPP26_FREESTANDING_EXECUTION
 Freestanding Library: algorithm, numeric, and random.
#define LBAL_LIBCPP26_FREESTANDING_EXPECTED
 Freestanding Library: inout expected span.
#define LBAL_LIBCPP26_FREESTANDING_FEATURE_TEST_MACROS
 Freestanding Feature-Test Macros and Implementation-Defined Extensions.
#define LBAL_LIBCPP26_FREESTANDING_FUNCTIONAL
 Freestanding Feature-Test Macros and Implementation-Defined Extensions.
#define LBAL_LIBCPP26_FREESTANDING_ITERATOR
 Freestanding Feature-Test Macros and Implementation-Defined Extensions.
#define LBAL_LIBCPP26_FREESTANDING_MDSPAN
 Freestanding Library: inout expected span.
#define LBAL_LIBCPP26_FREESTANDING_MEMORY
 Freestanding Feature-Test Macros and Implementation-Defined Extensions.
#define LBAL_LIBCPP26_FREESTANDING_MEMORY_MORE
 Freestanding Library: algorithm, numeric, and random.
#define LBAL_LIBCPP26_FREESTANDING_NUMERIC
 Freestanding Library: algorithm, numeric, and random.
#define LBAL_LIBCPP26_FREESTANDING_OPERATOR_NEW
 Freestanding Feature-Test Macros and Implementation-Defined Extensions.
#define LBAL_LIBCPP26_FREESTANDING_OPTIONAL
 Freestanding Library: Partial Classes.
#define LBAL_LIBCPP26_FREESTANDING_RANDOM
 Freestanding Library: algorithm, numeric, and random.
#define LBAL_LIBCPP26_FREESTANDING_RANGES
 Freestanding Feature-Test Macros and Implementation-Defined Extensions.
#define LBAL_LIBCPP26_FREESTANDING_RATIO
 Freestanding Feature-Test Macros and Implementation-Defined Extensions.
#define LBAL_LIBCPP26_FREESTANDING_STRING_VIEW
 Freestanding Library: Partial Classes.
#define LBAL_LIBCPP26_FREESTANDING_TUPLE
 Freestanding Feature-Test Macros and Implementation-Defined Extensions.
#define LBAL_LIBCPP26_FREESTANDING_UTILITY
 Freestanding Feature-Test Macros and Implementation-Defined Extensions.
#define LBAL_LIBCPP26_FREESTANDING_VARIANT
 Freestanding Library: Partial Classes.
#define LBAL_LIBCPP26_FSTREAM_NATIVE_HANDLE
 Native handles and file streams.
#define LBAL_LIBCPP26_FUNCTION_REF
 function_ref: a non-owning reference to a Callable
#define LBAL_LIBCPP26_FUNCTION_REF_LESS_DOUBLE_INDIRECTION
 Less double indirection in function_ref.
#define LBAL_LIBCPP26_FUNCTION_REF_RENAME_NONTYPE
 Rename std::nontype, and make it broadly useful.
#define LBAL_LIBCPP26_GENERATE_RANDOM
 Vector API for random number generation.
#define LBAL_LIBCPP26_HARDENED_ARRAY
 Standard Library Hardening.
#define LBAL_LIBCPP26_HARDENED_BASIC_STACKTRACE
 Minor additions to C++26 standard library hardening.
#define LBAL_LIBCPP26_HARDENED_BASIC_STRING
 Standard Library Hardening.
#define LBAL_LIBCPP26_HARDENED_BASIC_STRING_VIEW
 Standard Library Hardening.
#define LBAL_LIBCPP26_HARDENED_BITSET
 Standard Library Hardening.
#define LBAL_LIBCPP26_HARDENED_COMMON_ITERATOR
 Minor additions to C++26 standard library hardening.
#define LBAL_LIBCPP26_HARDENED_COUNTED_ITERATOR
 Minor additions to C++26 standard library hardening.
#define LBAL_LIBCPP26_HARDENED_DEQUE
 Standard Library Hardening.
#define LBAL_LIBCPP26_HARDENED_EXPECTED
 Standard Library Hardening.
#define LBAL_LIBCPP26_HARDENED_FORWARD_LIST
 Standard Library Hardening.
#define LBAL_LIBCPP26_HARDENED_INPLACE_VECTOR
 Standard Library Hardening.
#define LBAL_LIBCPP26_HARDENED_LIST
 Standard Library Hardening.
#define LBAL_LIBCPP26_HARDENED_MDSPAN
 Standard Library Hardening.
#define LBAL_LIBCPP26_HARDENED_OPTIONAL
 Standard Library Hardening.
#define LBAL_LIBCPP26_HARDENED_SHARED_PTR_ARRAY
 Minor additions to C++26 standard library hardening.
#define LBAL_LIBCPP26_HARDENED_SPAN
 Standard Library Hardening.
#define LBAL_LIBCPP26_HARDENED_VALARRAY
 Standard Library Hardening.
#define LBAL_LIBCPP26_HARDENED_VECTOR
 Standard Library Hardening.
#define LBAL_LIBCPP26_HARDENED_VIEW_INTERFACE
 Minor additions to C++26 standard library hardening.
#define LBAL_LIBCPP26_HAZARD_POINTER
 Hazard Pointers for C++26.
#define LBAL_LIBCPP26_HIVE
 Introduction of std::hive to the standard library.
#define LBAL_LIBCPP26_INDIRECT
 Vocabulary Types for Composite Class Design.
#define LBAL_LIBCPP26_INITIALIZER_LIST
 Resolve inconsistencies in begin/end for valarray and braced initializer lists.
#define LBAL_LIBCPP26_INPLACE_VECTOR
 inplace_vector
#define LBAL_LIBCPP26_INPLACE_VECTOR_BETTER_RETURN_TYPES
 Better return types in std::inplace_vector and std::exception_ptr_cast.
#define LBAL_LIBCPP26_INPLACE_VECTOR_REMOVE_TRY_APPEND_RANGE
 Remove try_append_range from inplace_vector for now.
#define LBAL_LIBCPP26_INTEGER_SEQUENCE_EXPANSION_STATEMENTS
 Add library Support for Expansion Statements.
#define LBAL_LIBCPP26_IS_STRUCTURAL
 New reflection metafunction—
#define LBAL_LIBCPP26_IS_VIRTUAL_BASE_OF
 A type trait for detecting virtual base classes.
#define LBAL_LIBCPP26_IS_WITHIN_LIFETIME
 Checking if a union alternative is active.
#define LBAL_LIBCPP26_IS_WITHIN_LIFETIME_EXTEND
 Extend std::is_within_lifetime.
#define LBAL_LIBCPP26_LINALG
 A free function linear algebra interface based on the BLAS.
#define LBAL_LIBCPP26_LINALG_BLAS_RANK
 Fix C++26 by making the rank-1, rank-2, rank-k, and rank-2k updates consistent with the BLAS.
#define LBAL_LIBCPP26_LINALG_FIX_TRANSPOSED
 Fix C++26 by adding transposed special cases for P2642 layouts.
#define LBAL_LIBCPP26_LINALG_OPTIMIZE_CONJUGATED
 Fix C++26 by optimizing linalg::conjugated for noncomplex value types.
#define LBAL_LIBCPP26_MDSPAN_DEXTENTS
 dextents Index Type Parameter
#define LBAL_LIBCPP26_NOT_FN_NTTP_CALLABLES
 Bind not_fn to NTTP callables.
#define LBAL_LIBCPP26_OBSERVABLE_CHECKPOINT
 Rename std::observable to std::observable_checkpoint, and add a feature-test macro.
#define LBAL_LIBCPP26_OPTIONAL_RANGE_SUPPORT
 Give std::optional Range Support.
#define LBAL_LIBCPP26_OPTIONAL_REFERENCE
 std::optional<T&>
#define LBAL_LIBCPP26_OUT_PTR_MORE
 Freestanding Library: inout expected span.
#define LBAL_LIBCPP26_PARALLEL_ALGORITHM_RANGE
 Add C++ parallel range algorithms.
#define LBAL_LIBCPP26_PARALLEL_SCHEDULER
 Parallel Scheduler.
#define LBAL_LIBCPP26_PHILOX_ENGINE
 Philox as an extension of the C++ RNG engines.
#define LBAL_LIBCPP26_POLYMORPHIC
 Vocabulary Types for Composite Class Design.
#define LBAL_LIBCPP26_PRINT_EFFICIENT
 Permit an efficient implementation of std::print.
#define LBAL_LIBCPP26_PRINT_MORE_EFFICIENT
 std::print more types faster with less memory
#define LBAL_LIBCPP26_RANGES_AS_CONST_FIX_CONVERTIBILITY
 std::basic_const_iterator should follow its underlying type’s convertibility
#define LBAL_LIBCPP26_RANGES_AS_INPUT
 views::to_input
#define LBAL_LIBCPP26_RANGES_AS_INPUT_RENAME
 Rename the to_input view to as_input.
#define LBAL_LIBCPP26_RANGES_CACHE_LATEST
 views::cache_latest
#define LBAL_LIBCPP26_RANGES_CONCAT
 views::concat
#define LBAL_LIBCPP26_RANGES_FILTER
 Filter View Extensions for Safer Use, Rev 3.
#define LBAL_LIBCPP26_RANGES_INDICES
 Add std::views::indices(n).
#define LBAL_LIBCPP26_RANGES_REMOVE_COMMON_REF_REQ
 Removing the common reference requirement from the indirectly invocable concepts.
#define LBAL_LIBCPP26_RANGES_RESERVE_HINT
 reserve_hint: Eagerly reserving memory for not-quite-sized lazy ranges
#define LBAL_LIBCPP26_RATIO
 Adding the new 2022 SI prefixes.
#define LBAL_LIBCPP26_RAW_MEMORY_ALGORITHMS_CONSTEXPR
 Improve constexpr supprt for raw memory management.
#define LBAL_LIBCPP26_RCU
 Read-Copy Update (RCU).
#define LBAL_LIBCPP26_REFERENCE_WRAPPER
 Comparisons for reference_wrapper.
#define LBAL_LIBCPP26_REFLECTION
 Error Handling in Reflection.
#define LBAL_LIBCPP26_REFLECTION_CLEANUP
 Miscellaneous Reflection Cleanup.
#define LBAL_LIBCPP26_REFLECTION_RENAME_TO_IS_VARARG_FUNCTION
 Rename meta::has_ellipsis_parameter to meta::is_vararg_function.
#define LBAL_LIBCPP26_REPLACEABLE_CONTRACT_VIOLATION_HANDLER
 Wording for AT1-057.
#define LBAL_LIBCPP26_SATURATION_ARITHMETIC
 Saturation arithmetic.
#define LBAL_LIBCPP26_SATURATION_ARITHMETIC_RENAMING
 Renaming saturation arithmetic functions.
#define LBAL_LIBCPP26_SENDERS
 std::execution
#define LBAL_LIBCPP26_SENDERS_OPTIONAL
 optional variants in sender/receiver
#define LBAL_LIBCPP26_SIMD
 std::simd - Merge data-parallel types from the Parallelism TS 2
#define LBAL_LIBCPP26_SIMD_BIT
 Extend <bit> header function with overloads for std::simd.
#define LBAL_LIBCPP26_SIMD_CHUNK
 Rename simd_split to simd_chunk.
#define LBAL_LIBCPP26_SIMD_COMPLEX
 Proposal to support interleaved complex values in std::simd.
#define LBAL_LIBCPP26_SIMD_DEDUCTION_GUIDES
 Missing deduction guide from simd::mask to simd::vec.
#define LBAL_LIBCPP26_SIMD_EXTEND
 Proposal to extend std::simd with more constructors and accessors.
#define LBAL_LIBCPP26_SIMD_IOTA
 Add an iota object for simd (and more).
#define LBAL_LIBCPP26_SIMD_NAMESPACES
 Exploration of namespaces for std::simd.
#define LBAL_LIBCPP26_SIMD_PERMUTATIONS
 Proposal to extend std::simd with permutation API.
#define LBAL_LIBCPP26_SIMD_RANGE
 std::simd is a range
#define LBAL_LIBCPP26_SMART_POINTER_OWNER_EQUALITY
 Enabling the Use of weak_ptr as Keys in Unordered Associative Containers.
#define LBAL_LIBCPP26_SMART_PTR_OWNER_EQUALITY
 Enabling the Use of weak_ptr as Keys in Unordered Associative Containers.
#define LBAL_LIBCPP26_SPAN_AT
 span.at()
#define LBAL_LIBCPP26_SPAN_INITIALIZER_LIST
 std::span over an initializer list
#define LBAL_LIBCPP26_SPAN_MORE
 Freestanding Library: inout expected span.
#define LBAL_LIBCPP26_SSTREAM_FROM_STRING_VIEW
 Interfacing stringstreams with string_view.
#define LBAL_LIBCPP26_START_LIFETIME
 Adjustments to union Lifetime Rules.
#define LBAL_LIBCPP26_STDBIT_H
 Add new library headers from C23.
#define LBAL_LIBCPP26_STDCKDINT_H
 Add new library headers from C23.
#define LBAL_LIBCPP26_STRING_SUBVIEW
 sub-string_view from string
#define LBAL_LIBCPP26_STRING_VIEW_CONCAT
 Allow concatenation of std::string and std::string_view.
#define LBAL_LIBCPP26_SUBMDSPAN
 submdspan
#define LBAL_LIBCPP26_SUBMDSPAN_FIX
 Fix submdspan for C++26.
#define LBAL_LIBCPP26_SUBMDSPAN_FUTURE_PROOF
 Future-proof submdspan-mapping.
#define LBAL_LIBCPP26_SUBMDSPAN_PADDED
 Padded mdspan layouts.
#define LBAL_LIBCPP26_SUBMDSPAN_UPDATE
 Working Draft: Programming Languages—C++.
#define LBAL_LIBCPP26_TASK
 Add a Coroutine Task Type.
#define LBAL_LIBCPP26_TEXT_ENCODING
 Naming Text Encodings to Demystify Them.
#define LBAL_LIBCPP26_TO_CHARS_BOOL_TEST
 Test for success or failure of <charconv> functions.
#define LBAL_LIBCPP26_TO_STRING
 to_string or not to_string
#define LBAL_LIBCPP26_TUPLE_LIKE_COMPLEX
 Add tuple protocol to complex.
#define LBAL_LIBCPP26_TYPE_ORDER
 Standardized Constexpr Type Ordering.
#define LBAL_LIBCPP26_VALARRAY
 Resolve inconsistencies in begin/end for valarray and braced initializer lists.
#define LBAL_LIBCPP26_VARIANT_VISITOR
 Member visit for std::variant.

LBAL_LIBCPP2D

These are all taken from features that have been incorporated into the C++2d Draft Standard.

Remarks
(FIXME - bitweeder) These are on hold till the associated proposals are published publicly.
#define LBAL_LIBCPP2D_BITOPS_BETTER_SHIFTING
 Better Shifting.
#define LBAL_LIBCPP2D_BITOPS_PERMUTATIONS
 Bit permutations.
#define LBAL_LIBCPP2D_CONSTANT_WRAPPER_REVERT_STRING
 Revert string support in std::constant_wrapper.
#define LBAL_LIBCPP2D_EXPECTED_UEXPECTED
 The unexpected in std::expected.
#define LBAL_LIBCPP2D_HAZARD_POINTER_BATCHES
 Hazard Pointer Batches.
#define LBAL_LIBCPP2D_MAP_LOOKUP
 Better Lookups for map, unordered_map, and flat_map.
#define LBAL_LIBCPP2D_MDSPAN_COPY
 Copy and fill for mdspan.
#define LBAL_LIBCPP2D_POINTER_TAG_PAIR
 constexpr pointer tagging
#define LBAL_LIBCPP2D_SIMD_BITOPS
 std::simd overloads for bit permutations
#define LBAL_LIBCPP2D_SIMD_BITOPS_BETTER_SHIFTING
 Better Shifting.
#define LBAL_LIBCPP2D_THREAD_ATTRIBUTES
 Thread attributes.
#define LBAL_LIBCPP2D_TO_CHARS_FIX_FLOAT
 Fix the default floating-point representation in std::format.
#define LBAL_LIBCPP2D_VIEW_INTERFACE
 view_interface::at()

Detailed Description

Provides feature detection describing the capabilities of the Standard Library implementation.

These tokens relate to library features. They are a mix of binary availability flags and versioned values describing levels of support. Where possible, these mimic the equivalent SD-6 macros, both in their naming and in their ranges of values. A variety of detection methods are used, but ultimately if availability of a given feature could only be determined by doing something that might cause a compilation error, we choose instead to assume the feature is not available. This behavior may be overridden by the client by explicitly setting the relevant macro. For example, if we’re unable to determine whether there is library support for Complex literals, we’ll set LBAL_LIBCPP14_COMPLEX_UDLS to 0; however, if the client is aware of support, they can manually set it 1 prior to our testing, and we will not override this setting unless we explicitly determine that it is incorrect.

Certain LBAL_LIBCPP*_* macros have corresponding LBAL_LIBCPP*_*_EXP macros; these latter macros are only set to a non-zero value if an experimental header is being used, which typically happens as a result of a given feature being part of a Technical Specification that has not yet been incorporated into the Standard. Note that LBAL_LIBCPP*_* and LBAL_LIBCPP*_*_EXP are mutually exclusive:

  • If a Standard Library implementation ships with both regular and experimental versions of a given header, the experimental version will be ignored.
  • If both LBAL_LIBCPP*_* and LBAL_LIBCPP*_*_EXP are user-defined to non-zero values, and the Standard header exists, LBAL_LIBCPP*_*_EXP will be set to 0 and a warning will be generated.
  • If LBAL_LIBCPP*_* has been user-set to 0 and LBAL_LIBCPP*_*_EXP left undefined, LBAL_LIBCPP*_*_EXP will also be set to 0, even if the experimental feature in question is available; this is done to prevent surprises in the event that a feature was explicitly disabled, and then later an experimental version of the same feature is made available. The reverse, case, though, is not true; if left undefined, LBAL_LIBCPP*_* will always be assigned a value based on actual feature detection.

Finally, note that if either macro is user-set to 0, its value will not be changed, regardless of circumstances.

Remarks
(APIME) As implied above, sometimes it is possible to definitely determine that a feature is not available, even if we cannot definitelty determine whether it is available. In both cases, we set the corresponding token to 0, but in the latter case the client may override us, and in the former we’ll override the override.
(SEEME - bitweeder) Note that some of these also require language support. We try to note such cases when they arise.
(SEEME - bitweeder) It is possible for a feature to be “available” on the basis of the presence of its header, SD-6 macro value, etc, but still have its token overridden depending on the build environment. An example of this is support for std::filesystem under macOS (and other Apple OSes): while it is part of the C++17 Standard, and Xcode 11.0+ ships with the <filesystem> header, the feature only works under macOS 10.15+, and as such will only be made available if the build is targeting a minimum of macOS 10.15. This is specifically not a runtime check, but rather happens at compile-time.
(APIME) There is some ambiguity regarding when we track the experimental version of a feature. Generally, we don’t bother if:
  • no major compiler ever shipped an experimental version
  • no major compiler ever shipped an experimental version in a non-preview release
  • the experimental version is/was completely broken
(SEEME - bitweeder) Some implementations may choose to make a feature available to an earlier C++ release than the the first officially supported one. This can be done, for example, to make features available from a Draft Standard. Generally, we don’t second-guess the implementation if they set an SD-6 macro a particular—unless we have good reason to know it was set incorrectly. More challenging is dealing with implementations that don’t have SD-6 macros. Our approach in this case is to identify a feature as available if the implementation is known to support it and the Language version in use is greater than the last unsupported version; this latter condition catches the frequent convention of compilers identifying a future unreleased dialect as the last Standard (e.g., 201103L) plus one (e.g., 201104L), until the Standard is official and the the version changes (e.g., to 201402L).

Macro Definition Documentation

◆ LBAL_LIBCPP14_CHRONO_UDLS

#define LBAL_LIBCPP14_CHRONO_UDLS

User-defined Literals for <chrono> types.

SD-6 equivalent: __cpp_lib_chrono_udls >= 201304L. This token will have a value of 0 if the proposal described here is not supported.

  • 201304L N3642 PDF User-defined Literals for Standard Library Types (part 1 - version 4)
See also
<chrono>

◆ LBAL_LIBCPP14_COMPLEX_UDLS

#define LBAL_LIBCPP14_COMPLEX_UDLS

User-defined Literals for <complex>.

SD-6 equivalent: __cpp_lib_complex_udls >= 201309L. This token will have a value of 0 if the proposal described here is not supported.

  • 201309L N3779 PDF User-defined Literals for std::complex
See also
<complex>

◆ LBAL_LIBCPP14_EXCHANGE_FUNCTION

#define LBAL_LIBCPP14_EXCHANGE_FUNCTION

Add std::exchange utility function.

SD-6 equivalent: __cpp_lib_exchange_function >= 201304L. This token will have a value of 0 if the proposal described here is not supported.

  • 201304L N3668 exchange() utility function, revision 3
See also
freestanding <utility>

◆ LBAL_LIBCPP14_GENERIC_ASSOCIATIVE_LOOKUP

#define LBAL_LIBCPP14_GENERIC_ASSOCIATIVE_LOOKUP

Add heterogeneous comparison lookup to associative containers.

SD-6 equivalent: __cpp_lib_generic_associative_lookup >= 201304L. This token will have a value of 0 if the proposal described here is not supported.

  • 201304L N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)
See also
<map> <set>

◆ LBAL_LIBCPP14_INTEGER_SEQUENCE

#define LBAL_LIBCPP14_INTEGER_SEQUENCE

Add template-based integer sequences.

SD-6 equivalent: __cpp_lib_integer_sequence >= 201304L. Note that __cpp_lib_integer_sequence 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.

  • 201304L N3658 Compile-time integer sequences
See also
freestanding <utility>

◆ LBAL_LIBCPP14_INTEGRAL_CONSTANT_CALLABLE

#define LBAL_LIBCPP14_INTEGRAL_CONSTANT_CALLABLE

Add constexpr operator-() to std::integral_constant.

SD-6 equivalent: __cpp_lib_integral_constant_callable >= 201304L. This token will have a value of 0 if the proposal described here is not supported.

  • 201304L N3545 PDF An Incremental Improvement to integral_constant
See also
freestanding <type_traits>

◆ LBAL_LIBCPP14_IS_FINAL

#define LBAL_LIBCPP14_IS_FINAL

Detect finalized classes.

SD-6 equivalent: __cpp_lib_is_final >= 201402L. This token will have a value of 0 if the proposal described here is not supported.

  • 201402L LWG2112 User-defined classes that cannot be derived from
See also
freestanding <type_traits>

◆ LBAL_LIBCPP14_IS_NULL_POINTER

#define LBAL_LIBCPP14_IS_NULL_POINTER

Detect null pointers.

SD-6 equivalent: __cpp_lib_is_null_pointer >= 201309L. This token will have a value of 0 if the proposal described here is not supported.

  • 201309L LWG2247 Type traits and std::nullptr_t
See also
freestanding <type_traits>

◆ LBAL_LIBCPP14_MAKE_REVERSE_ITERATOR

#define LBAL_LIBCPP14_MAKE_REVERSE_ITERATOR

std::make_reverse_iterator

SD-6 equivalent: __cpp_lib_make_reverse_iterator >= 201402L. This token will have a value of 0 if the proposal described here is not supported.

  • 201402L LWG2285 make_reverse_iterator
See also
freestanding <iterator>

◆ LBAL_LIBCPP14_MAKE_UNIQUE

#define LBAL_LIBCPP14_MAKE_UNIQUE

std::make_unique

SD-6 equivalent: __cpp_lib_make_unique >= 201304L. This token will have a value of 0 if the proposal described here is not supported.

  • 201304L N3656 make_unique (Revision 1)
See also
<memory>

◆ LBAL_LIBCPP14_NULL_ITERATORS

#define LBAL_LIBCPP14_NULL_ITERATORS

Allow value-initialized forward iterators to be compared.

SD-6 equivalent: __cpp_lib_null_iterators >= 201304L. This token will have a value of 0 if the proposal described here is not supported.

See also
freestanding <iterator>

◆ LBAL_LIBCPP14_QUOTED_STRING_IO

#define LBAL_LIBCPP14_QUOTED_STRING_IO

Add quoted-string sream i/o manipulator.

SD-6 equivalent: __cpp_lib_quoted_string_io >= 201304L. This token will have a value of 0 if the proposal described here is not supported.

  • 201304L N3654 Quoted Strings Library Proposal (Revision 2)
See also
<iomanip>

◆ LBAL_LIBCPP14_RESULT_OF_SFINAE

#define LBAL_LIBCPP14_RESULT_OF_SFINAE

Make std::result_of SFINAE-friendly.

SD-6 equivalent: __cpp_lib_result_of_sfinae >= 201210L. This token will have a value of 0 if the proposal described here is not supported.

  • 201210L N3462 std::result_of and SFINAE
See also
freestanding <functional> <type_traits>

◆ LBAL_LIBCPP14_ROBUST_NONMODIFYING_SEQ_OPS

#define LBAL_LIBCPP14_ROBUST_NONMODIFYING_SEQ_OPS

Make non-modifying sequence operations more robust.

SD-6 equivalent: __cpp_lib_robust_nonmodifying_seq_ops >= 201304L. This token will have a value of 0 if the proposal described here is not supported.

  • 201304L N3671 Making non-modifying sequence operations more robust: Revision 2
See also
<algorithm> freestanding

◆ LBAL_LIBCPP14_SHARED_TIMED_MUTEX

#define LBAL_LIBCPP14_SHARED_TIMED_MUTEX

Rename std::shared_mutex to std::shared_timed_mutex.

SD-6 equivalent: __cpp_lib_shared_timed_mutex >= 201402L. This token will have a value of 0 if the proposal described here is not supported.

  • 201402L N3891 A proposal to rename shared_mutex to shared_timed_mutex
See also
<shared_mutex>

◆ LBAL_LIBCPP14_STRING_UDLS

#define LBAL_LIBCPP14_STRING_UDLS

Predefine UDLs for strings.

SD-6 equivalent: __cpp_lib_string_udls >= 201304L. This token will have a value of 0 if the proposal described here is not supported.

  • 201304L N3642 PDF User-defined Literals for Standard Library Types (part 1 - version 4)
See also
<string>

◆ LBAL_LIBCPP14_TRANSFORMATION_TRAIT_ALIASES

#define LBAL_LIBCPP14_TRANSFORMATION_TRAIT_ALIASES

Provide type aliases for transformation traits.

SD-6 equivalent: __cpp_lib_transformation_trait_aliases >= 201304L. This token will have a value of 0 if the proposal described here is not supported.

  • 201304L N3655 PDF TransformationTraits Redux, v2
See also
freestanding <type_traits>

◆ LBAL_LIBCPP14_TRANSPARENT_OPERATORS

#define LBAL_LIBCPP14_TRANSPARENT_OPERATORS

Allow heterogeneous arguments to operator functors and template their function call operators.

SD-6 equivalent: __cpp_lib_transparent_operators >= 201210L. Note that __cpp_lib_transparent_operators 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.

  • 201210L N3421 Making Operator Functors greater<>
See also
freestanding <functional> <memory>

◆ LBAL_LIBCPP14_TUPLE_ELEMENT_T

#define LBAL_LIBCPP14_TUPLE_ELEMENT_T

Add std::tuple element_t type alias.

SD-6 equivalent: __cpp_lib_tuple_element_t >= 201402L. This token will have a value of 0 if the proposal described here is not supported.

  • 201402L N3887 PDF Consistent Metafunction Aliases
See also
freestanding <tuple>

◆ LBAL_LIBCPP14_TUPLES_BY_TYPE

#define LBAL_LIBCPP14_TUPLES_BY_TYPE

Allow addressing std::tuples by type.

SD-6 equivalent: __cpp_lib_tuples_by_type >= 201304L. This token will have a value of 0 if the proposal described here is not supported.

  • 201304L N3670 PDF Wording for Addressing Tuples by Type: Revision 2
See also
freestanding <tuple> <utility>

◆ LBAL_LIBCPP17_ADDRESSOF_CONSTEXPR

#define LBAL_LIBCPP17_ADDRESSOF_CONSTEXPR

Make std::addressof constexpr, as per defect report.

SD-6 equivalent: __cpp_lib_addressof_constexpr >= 201603L. This token will have a value of 0 if the proposal described here is not supported.

  • 201603L LWG2296 std::addressof should be constexpr
See also
freestanding <memory>

◆ LBAL_LIBCPP17_ALLOCATOR_TRAITS_IS_ALWAYS_EQUAL

#define LBAL_LIBCPP17_ALLOCATOR_TRAITS_IS_ALWAYS_EQUAL

Clean up noexcept usage (Rev 3).

SD-6 equivalent: __cpp_lib_allocator_traits_is_always_equal >= 201411L. This token will have a value of 0 if the proposal described here is not supported.

  • 201411L N4258 PDF Cleaning up noexcept in the Library (Rev 3)
See also
<deque> <forward_list> freestanding <list> <map> <memory> <scoped_allocator> <set> <string> <unordered_map> <unordered_set> <vector>

◆ LBAL_LIBCPP17_ANY

#define LBAL_LIBCPP17_ANY

<any> components from Library Fundamentals V1 TS

SD-6 equivalent: __cpp_lib_any >= 201603L. Note that __cpp_lib_any 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.

  • 201603L P0220R1 Adopt Library Fundamentals V1 TS Components for C++17 (R1)
Remarks
(APIME) We do not track experimental versions of this.
See also
<any>

◆ LBAL_LIBCPP17_ANY_INTERFACE

#define LBAL_LIBCPP17_ANY_INTERFACE

Impose homogeneous interface for std::variant, std::any and std::optional (Rev 3).

SD-6 equivalent: __cpp_lib_any >= 201606L. Note that __cpp_lib_any 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.

  • 201606L P0032R3 PDF Homogeneous interface for variant, any and optional (Revision 3)
Remarks
(APIME) We do not track experimental versions of this.
See also
<any>

◆ LBAL_LIBCPP17_APPLY

#define LBAL_LIBCPP17_APPLY

std::apply component from Library Fundamentals V1 TS

SD-6 equivalent: __cpp_lib_apply >= 201603L. Note that __cpp_lib_apply 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.

  • 201603L P0220R1 Adopt Library Fundamentals V1 TS Components for C++17 (R1)
See also
freestanding <tuple> <type_traits>

◆ LBAL_LIBCPP17_ARRAY_CONSTEXPR

#define LBAL_LIBCPP17_ARRAY_CONSTEXPR

Add constexpr modifiers to std::reverse_iterator, std::move_iterator, <array> and Range Access types.

SD-6 equivalent: __cpp_lib_array_constexpr >= 201603L. Note that __cpp_lib_array_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.

  • 201603L P0031R0 A Proposal to Add Constexpr Modifiers to reverse_iterator, move_iterator, array and Range Access
See also
<array> freestanding <iterator>

◆ LBAL_LIBCPP17_AS_CONST

#define LBAL_LIBCPP17_AS_CONST

Add std::as_const helper function template.

SD-6 equivalent: __cpp_lib_as_const >= 201510L. This token will have a value of 0 if the proposal described here is not supported.

  • 201510L P0007R1 Constant View: A proposal for a std::as_const helper function template
See also
freestanding <utility>

◆ LBAL_LIBCPP17_ATOMIC_IS_ALWAYS_LOCK_FREE

#define LBAL_LIBCPP17_ATOMIC_IS_ALWAYS_LOCK_FREE

Add constexpr atomic<T>::is_always_lock_free.

SD-6 equivalent: __cpp_lib_atomic_is_always_lock_free >= 201603L. This token will have a value of 0 if the proposal described here is not supported.

  • 201603L P0152R1 constexpr atomic<T>::is_always_lock_free
See also
<atomic> freestanding

◆ LBAL_LIBCPP17_BOOL_CONSTANT

#define LBAL_LIBCPP17_BOOL_CONSTANT

Introduce std::bool_constant.

SD-6 equivalent: __cpp_lib_bool_constant >= 201505L. This token will have a value of 0 if the proposal described here is not supported.

  • 201505L N4389 Wording for bool_constant, revision 1
See also
freestanding <type_traits>

◆ LBAL_LIBCPP17_BOYER_MOORE_SEARCHER

#define LBAL_LIBCPP17_BOYER_MOORE_SEARCHER

Add text search components from Library Fundamentals V1 TS.

SD-6 equivalent: __cpp_lib_boyer_moore_searcher >= 201603L. This token will have a value of 0 if the proposal described here is not supported.

  • 201603L P0220R1 Adopt Library Fundamentals V1 TS Components for C++17 (R1)
See also
<functional>

◆ LBAL_LIBCPP17_BYTE

#define LBAL_LIBCPP17_BYTE

Define std::byte type.

SD-6 equivalent: __cpp_lib_byte >= 201603L. This token will have a value of 0 if the proposal described here is not supported.

  • 201603L P0298R3 A byte type definition
See also
<cstddef> freestanding

◆ LBAL_LIBCPP17_CHRONO

#define LBAL_LIBCPP17_CHRONO

Rounding and abs fixes for <chrono>.

SD-6 equivalent: __cpp_lib_chrono >= 201510L. Note that __cpp_lib_chrono 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.

  • 201510L P0092R1 Polishing <chrono>
See also
<chrono>

◆ LBAL_LIBCPP17_CHRONO_CONSTEXPR

#define LBAL_LIBCPP17_CHRONO_CONSTEXPR

Add constexpr to certain <chrono> functions.

SD-6 equivalent: __cpp_lib_chrono >= 201611L. Note that __cpp_lib_chrono 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.

  • 201611L P0505R0 Wording for GB 50
See also
<chrono>

◆ LBAL_LIBCPP17_CLAMP

#define LBAL_LIBCPP17_CLAMP

Standard clamping algorithm.

SD-6 equivalent: __cpp_lib_clamp >= 201603L. This token will have a value of 0 if the proposal described here is not supported.

  • 201603L P0025R0 An algorithm to “clamp” a value between a pair of boundary values
See also
<algorithm> freestanding

◆ LBAL_LIBCPP17_CONSTEXPR_STRING

#define LBAL_LIBCPP17_CONSTEXPR_STRING

Make std::char_traits constexpr.

SD-6 equivalent: __cpp_lib_constexpr_string >= 201611L. Note that __cpp_lib_constexpr_string 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.

  • 201611L P0426R1 Constexpr for std::char_traits
See also
<string>

◆ LBAL_LIBCPP17_CONSTEXPR_STRING_VIEW

#define LBAL_LIBCPP17_CONSTEXPR_STRING_VIEW

Make std::char_traits constexpr.

SD-6 equivalent: __cpp_lib_constexpr_string_view >= 201611L. Note that __cpp_lib_constexpr_string_view 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.

  • 201611L P0426R1 Constexpr for std::char_traits
See also
<string_view>

◆ LBAL_LIBCPP17_DEDUCTION_GUIDES

#define LBAL_LIBCPP17_DEDUCTION_GUIDES

Toward a resolution of US7 and US14: Integrating template deduction for class templates into the standard library.

SD-6 equivalent: __cpp_lib_deduction_guides >= 201703L. This token will have a value of 0 if the proposal described here is not supported.

  • 201703L P0433R2 Toward a resolution of US7 and US14: Integrating template deduction for class templates into the standard library
Remarks
The Standard Committee opted not to formally vote in __cpp_lib_deduction_guides after they determined all implementations de facto already implemented it, so no test was needed.

◆ LBAL_LIBCPP17_ENABLE_SHARED_FROM_THIS

#define LBAL_LIBCPP17_ENABLE_SHARED_FROM_THIS

Re-enable std::shared_from_this.

SD-6 equivalent: __cpp_lib_enable_shared_from_this >= 201603L. This token will have a value of 0 if the proposal described here is not supported.

  • 201603L P0033R1 Re-enabling shared_from_this (revision 1)
Remarks
(SEEME - bitweeder) Prior to the December 2019 release, the official SD-6 doc contains an error wherein this token is mistakenly tied to P0074R0, a different proposal dealing with std::owner_less. We reflect the correct proposal here, but the date associated with this token may be incorrect.
See also
<memory>

◆ LBAL_LIBCPP17_EXECUTION

#define LBAL_LIBCPP17_EXECUTION

Add Library components of the Parallelism TS.

SD-6 equivalent: __cpp_lib_execution >= 201603L. Note that __cpp_lib_execution 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.

  • 201603L P0024R2 PDF The Parallelism TS Should be Standardized
Remarks
(APIME) We do not track experimental versions of this.
By itself, this token does not measure compliance with the referenced Working Group paper; use LBAL_LIBCPP17_STANDARDIZATION_OF_PARALLELISM_TS.
See also
<execution>

◆ LBAL_LIBCPP17_FILESYSTEM

#define LBAL_LIBCPP17_FILESYSTEM

Adopt File System TS.

SD-6 equivalent: __cpp_lib_filesystem >= 201603L. Note that __cpp_lib_filesystem 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.

  • 201603L P0218R1 Adopt File System TS for C++17
Remarks
(SEEME - bitweeder) Full implementation missing on Apple platforms prior to macOS 10.15.
See also
<filesystem>

◆ LBAL_LIBCPP17_FILESYSTEM_DIRECTORY_ENTRY_CACHING

#define LBAL_LIBCPP17_FILESYSTEM_DIRECTORY_ENTRY_CACHING

Add directory entry caching to <filesystem>.

SD-6 equivalent: __cpp_lib_filesystem >= 201703L. Note that __cpp_lib_filesystem 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.

  • 201703L P0317R1 Directory Entry Caching for Filesystem
Remarks
(SEEME - bitweeder) Full implementation missing on Apple platforms prior to macOS 10.15.
See also
<filesystem>

◆ LBAL_LIBCPP17_FILESYSTEM_EXP

#define LBAL_LIBCPP17_FILESYSTEM_EXP

Experimental implementation of the Filesystem TS.

SD-6 equivalent: __cpp_lib_experimental_filesystem >= 201603L. This token will have a value of 0 if the proposal described here is not supported.

Remarks
(SEEME - bitweeder) The experimental version differs in many ways from the final version, but it’s all that is offered until gcc 8 and clang 7. Generally, no one should use this, and it has been dropped from SD-6.

◆ LBAL_LIBCPP17_FILESYSTEM_PATHS_EXPANDED

#define LBAL_LIBCPP17_FILESYSTEM_PATHS_EXPANDED

Add relative path and std::string_view support to <filesystem>.

SD-6 equivalent: __cpp_lib_filesystem >= 201606L. Note that __cpp_lib_filesystem 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.

  • 201606L P0392R0 Adapting string_view by filesystem paths
Remarks
(SEEME - bitweeder) Full implementation missing on Apple platforms prior to macOS 10.15.
See also
<filesystem>

◆ LBAL_LIBCPP17_FILESYSTEM_RELATIVE_PATHS

#define LBAL_LIBCPP17_FILESYSTEM_RELATIVE_PATHS

Relative Paths for Filesystem.

SD-6 equivalent: __cpp_lib_filesystem >= 201606L. Note that __cpp_lib_filesystem 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.

  • 201606L P0219R1 Relative Paths for Filesystem
See also
<filesystem>

◆ LBAL_LIBCPP17_GCD_LCM

#define LBAL_LIBCPP17_GCD_LCM

Add std::gcd and std::lcm.

SD-6 equivalent: __cpp_lib_gcd_lcm >= 201606L. This token will have a value of 0 if the proposal described here is not supported.

  • 201606L P0295R0 Adopt Selected Library Fundamentals V2 Components for C++17
See also
freestanding <numeric>

◆ LBAL_LIBCPP17_HARDWARE_INTERFERENCE_SIZE

#define LBAL_LIBCPP17_HARDWARE_INTERFERENCE_SIZE

Provide relevant cache line sizes for construction and destruction.

SD-6 equivalent: __cpp_lib_hardware_interference_size >= 201703L. This token will have a value of 0 if the proposal described here is not supported.

  • 201703L P0154R1 constexpr std::thread::hardware_{true,false}_sharing_size
See also
freestanding <new>

◆ LBAL_LIBCPP17_HAS_UNIQUE_OBJECT_REPRESENTATIONS

#define LBAL_LIBCPP17_HAS_UNIQUE_OBJECT_REPRESENTATIONS

Add std::has_unique_object_representations.

This obliquely-named trait indicates whether a given type can be trivially hashed (e.g., it has no padding bits that would require special handling).

SD-6 equivalent: __cpp_lib_has_unique_object_representations >= 201606L. This token will have a value of 0 if the proposal described here is not supported.

  • 201606L P0258R2 has_unique_object_representations - wording
See also
freestanding <type_traits>

◆ LBAL_LIBCPP17_HYPOT

#define LBAL_LIBCPP17_HYPOT

Introduce a 3-argument overload to std::hypot.

This standardizes finding 3-dimensional distance as well as 2- dimensional distance.

SD-6 equivalent: __cpp_lib_hypot >= 201603L. This token will have a value of 0 if the proposal described here is not supported.

  • 201603L P0030R1 Proposal to Introduce a 3- Argument Overload to std::hypot
See also
<cmath>

◆ LBAL_LIBCPP17_INCOMPLETE_CONTAINER_ELEMENTS

#define LBAL_LIBCPP17_INCOMPLETE_CONTAINER_ELEMENTS

Introduce minimal incomplete type support for Standard containers.

SD-6 equivalent: __cpp_lib_incomplete_container_elements >= 201505L. This token will have a value of 0 if the proposal described here is not supported.

  • 201505L N4510 Minimal incomplete type support for standard containers, revision 4
See also
<forward_list> <list> <vector>

◆ LBAL_LIBCPP17_INVOKE

#define LBAL_LIBCPP17_INVOKE

Add std::invoke function template.

SD-6 equivalent: __cpp_lib_invoke >= 201411L. This token will have a value of 0 if the proposal described here is not supported.

  • 201411L N4169 A proposal to add invoke function template (Revision 1)
See also
freestanding <functional>

◆ LBAL_LIBCPP17_IS_AGGREGATE

#define LBAL_LIBCPP17_IS_AGGREGATE

Add std::is_aggregate type trait.

SD-6 equivalent: __cpp_lib_is_aggregate >= 201703L. This token will have a value of 0 if the proposal described here is not supported.

  • 201703L LWG2911 An is_aggregate type trait is needed
See also
freestanding <type_traits>

◆ LBAL_LIBCPP17_IS_INVOCABLE

#define LBAL_LIBCPP17_IS_INVOCABLE

Add std::is_invocable type trait to replace is_callable.

SD-6 equivalent: __cpp_lib_is_invocable >= 201703L. This token will have a value of 0 if the proposal described here is not supported.

  • 201703L P0604R0 Resolving GB 55, US 84, US 85, US 86
See also
freestanding <type_traits>

◆ LBAL_LIBCPP17_IS_SWAPPABLE

#define LBAL_LIBCPP17_IS_SWAPPABLE

Add std::is_swappable type trait family.

SD-6 equivalent: __cpp_lib_is_swappable >= 201603L. This token will have a value of 0 if the proposal described here is not supported.

  • 201603L P0185R1 Adding [nothrow-]swappable traits, revision 3
See also
freestanding <type_traits>

◆ LBAL_LIBCPP17_LAUNDER

#define LBAL_LIBCPP17_LAUNDER

Replacement of class objects containing reference members.

SD-6 equivalent: __cpp_lib_launder >= 201606L. This token will have a value of 0 if the proposal described here is not supported.

  • 201606L P0137R1 Core Issue 1776: Replacement of class objects containing reference members
See also
freestanding <new>

◆ LBAL_LIBCPP17_LOGICAL_TRAITS

#define LBAL_LIBCPP17_LOGICAL_TRAITS

Provide type traits for performing logical operations.

SD-6 equivalent: __cpp_lib_logical_traits >= 201510L. This token will have a value of 0 if the proposal described here is not supported.

  • 201510L P0013R1 Logical Operator Type Traits (revison 1)
See also
freestanding <type_traits>

◆ LBAL_LIBCPP17_MAKE_FROM_TUPLE

#define LBAL_LIBCPP17_MAKE_FROM_TUPLE

Introduce std::make_from_tuple to unpack a tuple into arguments.

SD-6 equivalent: __cpp_lib_make_from_tuple >= 201606L. This token will have a value of 0 if the proposal described here is not supported.

  • 201606L P0209R2 PDF make_from_tuple: apply for construction
See also
freestanding <tuple>

◆ LBAL_LIBCPP17_MAP_TRY_EMPLACE

#define LBAL_LIBCPP17_MAP_TRY_EMPLACE

Improve insertion into std::map.

SD-6 equivalent: __cpp_lib_map_try_emplace >= 201411L. This token will have a value of 0 if the proposal described here is not supported.

  • 201411L N4279 Improved insertion interface for unique-key maps (Revision 2.3)
See also
<map>

◆ LBAL_LIBCPP17_MATH_SPECIAL_FUNCTIONS

#define LBAL_LIBCPP17_MATH_SPECIAL_FUNCTIONS

Incorporate math functions specified in IS 29124:2010.

SD-6 equivalent: __cpp_lib_math_special_functions >= 201603L. This token will have a value of 0 if the proposal described here is not supported.

  • 201603L P0226R1 PDF Mathematical Special Functions for C++17, v5
See also
<cmath>

◆ LBAL_LIBCPP17_MEMORY_RESOURCE

#define LBAL_LIBCPP17_MEMORY_RESOURCE

Incorporate memory management components from Library Fundamentals V1 TS.

SD-6 equivalent: __cpp_lib_memory_resource >= 201603L. This token will have a value of 0 if the proposal described here is not supported.

  • 201603L P0220R1 Adopt Library Fundamentals V1 TS Components for C++17 (R1)
See also
<memory_resource>

◆ LBAL_LIBCPP17_NODE_EXTRACT

#define LBAL_LIBCPP17_NODE_EXTRACT

Add splicing to associative containers.

SD-6 equivalent: __cpp_lib_node_extract >= 201606L. This token will have a value of 0 if the proposal described here is not supported.

  • 201606L P0083R3 PDF Splicing Maps and Sets (Revision 5)
See also
<map> <set> <unordered_map> <unordered_set>

◆ LBAL_LIBCPP17_NONMEMBER_CONTAINER_ACCESS

#define LBAL_LIBCPP17_NONMEMBER_CONTAINER_ACCESS

Incorporate non-member functions into Standard container class interfaces.

SD-6 equivalent: __cpp_lib_nonmember_container_access >= 201411L. This token will have a value of 0 if the proposal described here is not supported.

  • 201411L N4280 Non-member size() and more (Revison 2)
See also
<array> <deque> <forward_list> freestanding <iterator> <list> <map> <regex> <set> <string> <unordered_map> <unordered_set> <vector>

◆ LBAL_LIBCPP17_NOT_FN

#define LBAL_LIBCPP17_NOT_FN

Add std::not_fn.

SD-6 equivalent: __cpp_lib_not_fn >= 201603L. Note that __cpp_lib_not_fn 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.

  • 201603L P0005R4 PDF Adopt not_fn from Library Fundamentals 2 for C++17
See also
freestanding <functional>

◆ LBAL_LIBCPP17_OPTIONAL

#define LBAL_LIBCPP17_OPTIONAL

Add std::optional.

SD-6 equivalent: __cpp_lib_optional >= 201603L. Note that __cpp_lib_optional 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.

  • 201603L P0220R1 Adopt Library Fundamentals V1 TS Components for C++17 (R1)
See also
<optional>

◆ LBAL_LIBCPP17_OPTIONAL_GREATER_EQUAL

#define LBAL_LIBCPP17_OPTIONAL_GREATER_EQUAL

Homogenize std::optional interface with std::any and std::variant.

SD-6 equivalent: __cpp_lib_optional >= 201606L. Note that __cpp_lib_optional 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.

  • 201606L P0032R3 PDF Homogeneous interface for variant, any and optional (Revision 3)
Remarks
Note that the P0032R3 and [P0307R2] (https://wg21.link/P0307R2) proposals were approved at the same time, and hence shared a token value. While we provide separate features for LBAL_LIBCPP17_OPTIONAL_GREATER_EQUAL and LBAL_LIBCPP17_OPTIONAL_INTERFACE, they’re not actually differentiated by the SD-6 rules (though they might be at the platform level).
See also
<optional>

◆ LBAL_LIBCPP17_OPTIONAL_INTERFACE

#define LBAL_LIBCPP17_OPTIONAL_INTERFACE

Homogenize std::optional interface with std::any and std::variant.

SD-6 equivalent: __cpp_lib_optional >= 201606L. Note that __cpp_lib_optional 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.

  • 201606L P0307R2 PDF Making Optional Greater Equal Again
Remarks
Note that the P0032R3 and [P0307R2] (https://wg21.link/P0307R2) proposals were approved at the same time, and hence shared a token value. While we provide separate features for LBAL_LIBCPP17_OPTIONAL_GREATER_EQUAL and LBAL_LIBCPP17_OPTIONAL_INTERFACE, they’re not actually differentiated by the SD-6 rules (though they might be at the platform level).
See also
<optional>

◆ LBAL_LIBCPP17_PARALLEL_ALGORITHM

#define LBAL_LIBCPP17_PARALLEL_ALGORITHM

Standardize the Parallelism TS.

SD-6 equivalent: __cpp_lib_parallel_algorithm >= 201603L. Note that __cpp_lib_parallel_algorithm 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.

  • 201603L P0024R2 PDF The Parallelism TS Should be Standardized
Remarks
(APIME) We do not track experimental versions of this.
By itself, this macro does not measure compliance with the original Working Group paper; for that, use LBAL_LIBCPP17_STANDARDIZATION_OF_PARALLELISM_TS.
See also
<algorithm> <memory> <numeric>

◆ LBAL_LIBCPP17_RAW_MEMORY_ALGORITHMS

#define LBAL_LIBCPP17_RAW_MEMORY_ALGORITHMS

Supply tools for raw memory management.

SD-6 equivalent: __cpp_lib_raw_memory_algorithms >= 201606L. Note that __cpp_lib_raw_memory_algorithms 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.

  • 201606L P0040R3 Extending memory management tools
See also
<memory>

◆ LBAL_LIBCPP17_SAMPLE

#define LBAL_LIBCPP17_SAMPLE

Adopt std::sample from the Library Fundamentals V1 TS.

SD-6 equivalent: __cpp_lib_sample >= 201603L. This token will have a value of 0 if the proposal described here is not supported.

  • 201603L P0220R1 Adopt Library Fundamentals V1 TS Components for C++17 (R1)
See also
<algorithm> freestanding

◆ LBAL_LIBCPP17_SCOPED_LOCK

#define LBAL_LIBCPP17_SCOPED_LOCK

Add a variadic variant of std::lock_guard under a new name.

SD-6 equivalent: __cpp_lib_scoped_lock >= 201703L. This token will have a value of 0 if the proposal described here is not supported.

  • 201703L P0156R2 Variadic lock_guard (Rev. 4)
Remarks
It was determined that simply making std::lock_guard variadic would break ABI, hence the name change.
See also
<mutex>

◆ LBAL_LIBCPP17_SHARED_MUTEX

#define LBAL_LIBCPP17_SHARED_MUTEX

Officially change std::shared_mutex to an untimed mutex.

This change was corresponds to the addition of an explicit std::shared_timed_mutex.

SD-6 equivalent: __cpp_lib_shared_mutex >= 201505L. This token will have a value of 0 if the proposal described here is not supported.

  • 201505L N4508 A proposal to add shared_mutex (untimed) (Revision 4)
See also
<shared_mutex>

◆ LBAL_LIBCPP17_SHARED_PTR_ARRAYS

#define LBAL_LIBCPP17_SHARED_PTR_ARRAYS

Fix std::shared_ptr support for arrays.

SD-6 equivalent: __cpp_lib_shared_ptr_arrays >= 201611L. Note that __cpp_lib_shared_ptr_arrays 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.

  • 201611L P0497R0 Fixes to shared_ptr support for arrays
See also
<memory>

◆ LBAL_LIBCPP17_SHARED_PTR_WEAK_TYPE

#define LBAL_LIBCPP17_SHARED_PTR_WEAK_TYPE

Add shared_ptr::weak_type.

SD-6 equivalent: __cpp_lib_shared_ptr_weak_type >= 201606L. This token will have a value of 0 if the proposal described here is not supported.

  • 201606L P0163R0 shared_ptr::weak_type
See also
<memory>

◆ LBAL_LIBCPP17_STANDARDIZATION_OF_PARALLELISM_TS

#define LBAL_LIBCPP17_STANDARDIZATION_OF_PARALLELISM_TS

Track full compliance with the Parallelism Standard.

This token tracks compliance with the Standard as it relates to implementing the referenced Working Group paper; there is no correspoding SD-6 macro, or rather, there are two relevant macros which each track the different features required for compliance. We actually track both of those, as well as this meta-feature, separately. As such, this token represents an aggregate condition: if both LBAL_LIBCPP17_EXECUTION and LBAL_LIBCPP17_PARALLEL_ALGORITHM indicate compliance, this gets set to 1; otherwise, it’s set to 0.

Remarks
(APIME) We do not track experimental versions of this, partly because the Draft versions tracked a different set of features, in different places, which were refactored/replaced.
(SEEME - bitweeder) We do not check compliance with iterations on the constituent components (e.g., LBAL_LIBCPP20_EXECUTION_VECTORIZATION), only that we have met the base requirements for supporting Parallelism. Extending tracking is one option; another is to eliminate this meta-token to avoid over- complicating things.

◆ LBAL_LIBCPP17_STRING_VIEW

#define LBAL_LIBCPP17_STRING_VIEW

Adopt std::string_view from the Library Fundamentals V1 TS.

SD-6 equivalent: __cpp_lib_string_view >= 201603L. Note that __cpp_lib_string_view 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.

  • 201603L P0220R1 Adopt Library Fundamentals V1 TS Components for C++17 (R1)
See also
<string> <string_view>

◆ LBAL_LIBCPP17_STRING_VIEW_INTERFACE

#define LBAL_LIBCPP17_STRING_VIEW_INTERFACE

Address interface inversion between <string> and <string_view>.

SD-6 equivalent: __cpp_lib_string_view >= 201606L. Note that __cpp_lib_string_view 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.

  • 201606L P0254R2 PDF Integrating std::string_view and std::string
See also
<string> <string_view>

◆ LBAL_LIBCPP17_TO_CHARS

#define LBAL_LIBCPP17_TO_CHARS

Elementary string conversions, revision 5.

This token tracks compliance with both the integer and floating-point tokens for to_chars and from_chars.

SD-6 equivalent: __cpp_lib_to_chars >= 201611L. Note that __cpp_lib_to_chars 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.

  • 201611L LWG3137 Header for __cpp_lib_to_chars
  • 201611L P0067R5 Elementary string conversions, revision 5
  • 201611L P0682R1 Repairing elementary string conversions
Remarks
(SEEME - bitweeder) This got weird since the functions were moved to their own header and their signatures were altered, post-Standardization, all as part of a Defect Report resolution.
(SEEME - bitweeder) This got weirder since multiple major implementations falsely set their SD-6 macros as if they are in full compliance, when they actually only support integer conversions. This is reflected by the creation of two tokens that feed into this one, despite there only being one underlying SD-6 macro.
See also
<charconv>

◆ LBAL_LIBCPP17_TO_CHARS_FP

#define LBAL_LIBCPP17_TO_CHARS_FP

Floating-point compliance with Elementary string conversions.

This tracks the floating-point conversion portion of LBAL_LIBCPP17_TO_CHARS.

SD-6 equivalent: __cpp_lib_to_chars >= 201611L. Note that __cpp_lib_to_chars 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.

  • 201611L LWG3137 Header for __cpp_lib_to_chars
  • 201611L P0067R5 Elementary string conversions, revision 5
  • 201611L P0682R1 Repairing elementary string conversions
Remarks
(SEEME - bitweeder) This got weird since the functions were moved to their own header and their signatures were altered, post-Standardization, all as part of a Defect Report resolution.
(SEEME - bitweeder) This got weirder since multiple major implementations falsely set their SD-6 macros as if they are in full compliance, when they actually only support integer conversions. This is reflected by the creation of two tokens that feed into this one, despite there only being one underlying SD-6 macro.
See also
<charconv>

◆ LBAL_LIBCPP17_TO_CHARS_INTEGER

#define LBAL_LIBCPP17_TO_CHARS_INTEGER

Integer compliance with Elementary string conversions.

This tracks the integer conversion portion of LBAL_LIBCPP17_TO_CHARS.

SD-6 equivalent: __cpp_lib_to_chars >= 201611L. Note that __cpp_lib_to_chars 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.

  • 201611L LWG3137 Header for __cpp_lib_to_chars
  • 201611L P0067R5 Elementary string conversions, revision 5
  • 201611L P0682R1 Repairing elementary string conversions
Remarks
(SEEME - bitweeder) This got weird since the functions were moved to their own header and their signatures were altered, post-Standardization, all as part of a Defect Report resolution.
(SEEME - bitweeder) This got weirder since multiple major implementations falsely set their SD-6 macros as if they are in full compliance, when they actually only support integer conversions. This is reflected by the creation of two tokens that feed into this one, despite there only being one underlying SD-6 macro.
See also
<charconv>

◆ LBAL_LIBCPP17_TRANSPARENT_OPERATORS

#define LBAL_LIBCPP17_TRANSPARENT_OPERATORS

Make std::owner_less more flexible.

SD-6 equivalent: __cpp_lib_transparent_operators >= 201510L. Note that __cpp_lib_transparent_operators 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.

  • 201510L P0074R0 Making std::owner_less more flexible
Remarks
(SEEME - bitweeder) The official SD-6 doc prior to December 2019 contains an error wherein this proposal and functionality are mistakenly tied to __cpp_lib_enable_shared_from_this.
See also
freestanding <functional> <memory>

◆ LBAL_LIBCPP17_TYPE_TRAIT_VARIABLE_TEMPLATES

#define LBAL_LIBCPP17_TYPE_TRAIT_VARIABLE_TEMPLATES

Adopt variable templates for type traits from the Library Fundamentals V1 TS.

SD-6 equivalent: __cpp_lib_type_trait_variable_templates >= 201510L. This token will have a value of 0 if the proposal described here is not supported.

  • 201510L P0006R0 Adopt Type Traits Variable Templates from Library Fundamentals TS for C++17
See also
freestanding <type_traits>

◆ LBAL_LIBCPP17_UNCAUGHT_EXCEPTIONS

#define LBAL_LIBCPP17_UNCAUGHT_EXCEPTIONS

Add std::uncaught_exceptions.

SD-6 equivalent: __cpp_lib_uncaught_exceptions >= 201411L. This token will have a value of 0 if the proposal described here is not supported.

  • 201411L N4259 Wording for std::uncaught_exceptions
See also
<exception> freestanding

◆ LBAL_LIBCPP17_UNORDERED_MAP_TRY_EMPLACE

#define LBAL_LIBCPP17_UNORDERED_MAP_TRY_EMPLACE

Improve insertion into std::unordered_map.

SD-6 equivalent: __cpp_lib_unordered_map_try_emplace >= 201411L. This token will have a value of 0 if the proposal described here is not supported.

  • 201411L N4279 Improved insertion interface for unique-key maps (Revision 2.3)
See also
<unordered_map>

◆ LBAL_LIBCPP17_VARIANT

#define LBAL_LIBCPP17_VARIANT

Add std::variant.

SD-6 equivalent: __cpp_lib_variant >= 201606L. Note that __cpp_lib_variant 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.

  • 201606L P0032R3 PDF Homogeneous interface for variant, any and optional (Revision 3)
  • 201606L P0088R3 Variant: a type-safe union for C++17 (v8)
  • 201606L P0393R3 PDF Making Variant Greater Equal
Remarks
We track all three 202106L proposals with one token, as they were all voted in at the same time, and no implementation we’re aware of implemented them piecemeal.
See also
<variant>

◆ LBAL_LIBCPP17_VOID_T

#define LBAL_LIBCPP17_VOID_T

Add std::void_t as a transformation type trait.

SD-6 equivalent: __cpp_lib_void_t >= 201411L. This token will have a value of 0 if the proposal described here is not supported.

  • 201411L N3911 TransformationTrait Alias void_t
See also
freestanding <type_traits>

◆ LBAL_LIBCPP20_ARRAY_CONSTEXPR_COMPARISONS

#define LBAL_LIBCPP20_ARRAY_CONSTEXPR_COMPARISONS

Provide constexpr comparison operators for std::array.

SD-6 equivalent: __cpp_lib_array_constexpr >= 201806L. Note that __cpp_lib_array_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.

  • 201806L P1023R0 constexpr comparison operators for std::array
See also
<array> freestanding <iterator>

◆ LBAL_LIBCPP20_ARRAY_CONSTEXPR_ITERATOR

#define LBAL_LIBCPP20_ARRAY_CONSTEXPR_ITERATOR

Define requirements for constexpr iterators.

SD-6 equivalent: __cpp_lib_array_constexpr >= 201803L. Note that __cpp_lib_array_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.

  • 201803L LWG3257 Missing feature testing macro update from P0858
  • 201803L P0858R0 Constexpr iterator requirements
Remarks
The issue raised in LWG3257 was simply that the SD-6 macro update voted in with 201803L had not been applied.
See also
<array> freestanding <iterator>

◆ LBAL_LIBCPP20_ARRAY_CONSTEXPR_UTILITIES

#define LBAL_LIBCPP20_ARRAY_CONSTEXPR_UTILITIES

Provide constexpr std::array swap and fill.

SD-6 equivalent: __cpp_lib_array_constexpr >= 201811L. Note that __cpp_lib_array_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.

  • 201811L P1032R1 Misc constexpr bits
See also
<array> freestanding <iterator>

◆ LBAL_LIBCPP20_ASSUME_ALIGNED

#define LBAL_LIBCPP20_ASSUME_ALIGNED

Provide std::assume_aligned compiler hint utility function Library.

SD-6 equivalent: __cpp_lib_assume_aligned >= 201811L. This token will have a value of 0 if the proposal described here is not supported.

  • 201811L P1007R3 std::assume_aligned
See also
freestanding <memory>

◆ LBAL_LIBCPP20_ATOMIC_FLAG_TEST

#define LBAL_LIBCPP20_ATOMIC_FLAG_TEST

Add atomic_flag::test components of the C++20 Synchronization Library.

SD-6 equivalent: __cpp_lib_atomic_flag_test >= 201907L. This token will have a value of 0 if the proposal described here is not supported.

  • 201907L P1135R6 The C++20 Synchronization Library
See also
<atomic> freestanding

◆ LBAL_LIBCPP20_ATOMIC_FLOAT

#define LBAL_LIBCPP20_ATOMIC_FLOAT

Extend <atomic> support to floating point types.

SD-6 equivalent: __cpp_lib_atomic_float >= 201711L. This token will have a value of 0 if the proposal described here is not supported.

  • 201711L P0020R6 Floating Point Atomic
See also
<atomic> freestanding

◆ LBAL_LIBCPP20_ATOMIC_LOCK_FREE_TYPE_ALIASES

#define LBAL_LIBCPP20_ATOMIC_LOCK_FREE_TYPE_ALIASES

Add atomic lockfree type aliases from the C++20 Synchronization.

SD-6 equivalent: __cpp_lib_atomic_lock_free_type_aliases >= 201907L. This token will have a value of 0 if the proposal described here is not supported.

  • 201907L P1135R6 The C++20 Synchronization Library
See also
<atomic>

◆ LBAL_LIBCPP20_ATOMIC_REF

#define LBAL_LIBCPP20_ATOMIC_REF

Allow atomic operations to apply to non-atomic objects.

SD-6 equivalent: __cpp_lib_atomic_ref >= 201806L. Note that __cpp_lib_atomic_ref 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.

See also
<atomic> freestanding

◆ LBAL_LIBCPP20_ATOMIC_SHARED_PTR

#define LBAL_LIBCPP20_ATOMIC_SHARED_PTR

Fixes for atomic std::shared_ptr and std::weak_ptr.

SD-6 equivalent: __cpp_lib_atomic_shared_ptr >= 201711L. This token will have a value of 0 if the proposal described here is not supported.

  • 201711L P0718R2 Revising atomic_shared_ptr for C++20
See also
<memory>

◆ LBAL_LIBCPP20_ATOMIC_VALUE_INITIALIZATION

#define LBAL_LIBCPP20_ATOMIC_VALUE_INITIALIZATION

Eliminate the surprising value-initialization behavior of std::atomic.

SD-6 equivalent: __cpp_lib_atomic_value_initialization >= 201911L. This token will have a value of 0 if the proposal described here is not supported.

  • 201911L P0883R2 Fixing Atomic Initialization
See also
<atomic> freestanding <memory>

◆ LBAL_LIBCPP20_ATOMIC_WAIT

#define LBAL_LIBCPP20_ATOMIC_WAIT

Add atomic wait components of the C++20 Synchronization Library.

SD-6 equivalent: __cpp_lib_atomic_wait >= 201907L. This token will have a value of 0 if the proposal described here is not supported.

  • 201907L P1135R6 The C++20 Synchronization Library
See also
<atomic> freestanding

◆ LBAL_LIBCPP20_BARRIER

#define LBAL_LIBCPP20_BARRIER

Add std::barrier components of the C++20 Synchronization Library.

SD-6 equivalent: __cpp_lib_barrier >= 201907L. Note that __cpp_lib_barrier 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.

  • 201907L P1135R6 The C++20 Synchronization Library
See also
<barrier>

◆ LBAL_LIBCPP20_BIND_FRONT

#define LBAL_LIBCPP20_BIND_FRONT

Introduce std::bind_front to supersede std::bind.

SD-6 equivalent: __cpp_lib_bind_front >= 201811L. Note that __cpp_lib_bind_front 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.

  • 201811L P0356R5 Simplified partial function application
See also
freestanding <functional>

◆ LBAL_LIBCPP20_BIND_FRONT_NO_UNWRAP

#define LBAL_LIBCPP20_BIND_FRONT_NO_UNWRAP

Prevent std::bind_front from unwrapping std::reference_wrapper.

SD-6 equivalent: __cpp_lib_bind_front >= 201907L. Note that __cpp_lib_bind_front 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.

  • 201907L P1651R0 bind_front should not unwrap reference_wrapper
See also
freestanding <functional>

◆ LBAL_LIBCPP20_BIT_CAST

#define LBAL_LIBCPP20_BIT_CAST

Introduce robust casts between bit-compatible types.

SD-6 equivalent: __cpp_lib_bit_cast >= 201806L. This token will have a value of 0 if the proposal described here is not supported.

  • 201806L P0476R2 Bit-casting object representations
See also
<bit> freestanding

◆ LBAL_LIBCPP20_BITOPS

#define LBAL_LIBCPP20_BITOPS

Introduce support for hardware-level bit operations.

SD-6 equivalent: __cpp_lib_bitops >= 201907L. Note that __cpp_lib_bitops 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.

See also
<bit> freestanding

◆ LBAL_LIBCPP20_BOUNDED_ARRAY_TRAITS

#define LBAL_LIBCPP20_BOUNDED_ARRAY_TRAITS

Introduce traits to distinguish between bounded and unbounded arrays.

SD-6 equivalent: __cpp_lib_bounded_array_traits >= 201902L. This token will have a value of 0 if the proposal described here is not supported.

  • 201902L P1357R1 Traits for [Un]bounded Arrays
See also
freestanding <type_traits>

◆ LBAL_LIBCPP20_CHAR8_T

#define LBAL_LIBCPP20_CHAR8_T

Define char8_t as the base type for UTF-8 encodings (Rev 6).

SD-6 equivalent: __cpp_lib_char8_t >= 201811L. Note that __cpp_lib_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.

  • 201811L P0482R6 char8_t: A type for UTF-8 characters and strings (Revision 6)
See also
<atomic> <filesystem> freestanding <iosfwd> <istream> <limits> <locale> <ostream> <string> <string_view>

◆ LBAL_LIBCPP20_CHAR8_T_COMPAT

#define LBAL_LIBCPP20_CHAR8_T_COMPAT

Fix backward compatibility issues introduced by char8_t.

SD-6 equivalent: __cpp_lib_char8_t >= 201907L. Note that __cpp_lib_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.

  • 201907L P1423R3 char8_t backward compatibility remediation
See also
<atomic> <filesystem> freestanding <iosfwd> <istream> <limits> <locale> <ostream> <string> <string_view>

◆ LBAL_LIBCPP20_CHRONO_CALENDAR

#define LBAL_LIBCPP20_CHRONO_CALENDAR

Add support for Calendars and Time Zones to <chrono>.

SD-6 equivalent: __cpp_lib_chrono >= 201803L. Note that __cpp_lib_chrono 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.

  • 201803L P0355R7 Extending <chrono> to Calendars and Time Zones
See also
<chrono>

◆ LBAL_LIBCPP20_CHRONO_FIXES

#define LBAL_LIBCPP20_CHRONO_FIXES

Miscellaneous minor fixes for <chrono>.

SD-6 equivalent: __cpp_lib_chrono >= 201907L. Note that __cpp_lib_chrono 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.

  • 201907L P1466R3 Miscellaneous minor fixes for chrono
See also
<chrono>

◆ LBAL_LIBCPP20_CONCEPTS

#define LBAL_LIBCPP20_CONCEPTS

Standard Library Concepts.

SD-6 equivalent: __cpp_lib_concepts >= 201806L. Note that __cpp_lib_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.

See also
<compare> <concepts> freestanding

◆ LBAL_LIBCPP20_CONCEPTS_BOOLEAN_TESTABLE

#define LBAL_LIBCPP20_CONCEPTS_BOOLEAN_TESTABLE

Wording for boolean-testable.

SD-6 equivalent: __cpp_lib_concepts >= 202002L. Note that __cpp_lib_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.

  • 202002L P1964R2 Wording for boolean-testable
See also
<compare> <concepts> freestanding

◆ LBAL_LIBCPP20_CONCEPTS_EXP

#define LBAL_LIBCPP20_CONCEPTS_EXP

Experimental version of Standard Library Concepts.

SD-6 equivalent: __cpp_lib_experimental_concepts >= 201806L. This token will have a value of 0 if the proposal described here is not supported.

◆ LBAL_LIBCPP20_CONCEPTS_STANDARD_CASE

#define LBAL_LIBCPP20_CONCEPTS_STANDARD_CASE

Rename C++ Concepts to use standard_case.

SD-6 equivalent: __cpp_lib_concepts >= 201907L. Note that __cpp_lib_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.

  • 201907L P1754R1 PDF Rename concepts to standard_case for C++20, while we still can
See also
<compare> <concepts> freestanding

◆ LBAL_LIBCPP20_CONSTEXPR_ALGORITHMS

#define LBAL_LIBCPP20_CONSTEXPR_ALGORITHMS

Add constexpr to <algorithm> and <utility> functions.

SD-6 equivalent: __cpp_lib_constexpr_algorithms >= 201806L. Note that __cpp_lib_constexpr_algorithms 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.

  • 201806L P0202R3 Add Constexpr Modifiers to Functions in <algorithm> and <utility> Headers
See also
<algorithm> <utility>

◆ LBAL_LIBCPP20_CONSTEXPR_ALGORITHMS_SWAP

#define LBAL_LIBCPP20_CONSTEXPR_ALGORITHMS_SWAP

Add constexpr to std::swap and related functions.

SD-6 equivalent: __cpp_lib_constexpr_algorithms >= 201806L. Note that __cpp_lib_constexpr_algorithms 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.

  • 201806L LWG3256 Feature testing macro for constexpr algorithms
  • 201806L LWG3792 __cpp_lib_constexpr_algorithms should also be defined in
  • 201806L P0879R0 Constexpr for swap and swap related functions
See also
<algorithm> <utility>

◆ LBAL_LIBCPP20_CONSTEXPR_COMPLEX

#define LBAL_LIBCPP20_CONSTEXPR_COMPLEX

Add more constexpr support to <complex>.

SD-6 equivalent: __cpp_lib_constexpr_complex >= 201711L. Note that __cpp_lib_constexpr_complex 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.

See also
<complex>

◆ LBAL_LIBCPP20_CONSTEXPR_DYNAMIC_ALLOC

#define LBAL_LIBCPP20_CONSTEXPR_DYNAMIC_ALLOC

Add constexpr memory allocators used by dynamic containers.

SD-6 equivalent: __cpp_lib_constexpr_dynamic_alloc >= 201907L. This token will have a value of 0 if the proposal described here is not supported.

  • 201907L P0784R7 More constexpr containers
See also
<memory>

◆ LBAL_LIBCPP20_CONSTEXPR_FUNCTIONAL

#define LBAL_LIBCPP20_CONSTEXPR_FUNCTIONAL

Make more of <functional> constexpr.

SD-6 equivalent: __cpp_lib_constexpr_functional >= 201811L. Note that __cpp_lib_constexpr_functional 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.

  • 201811L P1032R1 Misc constexpr bits
See also
freestanding <functional>

◆ LBAL_LIBCPP20_CONSTEXPR_FUNCTIONAL_INVOKE

#define LBAL_LIBCPP20_CONSTEXPR_FUNCTIONAL_INVOKE

Make std::invoke constexpr.

SD-6 equivalent: __cpp_lib_constexpr_functional >= 201907L. Note that __cpp_lib_constexpr_functional 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.

See also
freestanding <functional>

◆ LBAL_LIBCPP20_CONSTEXPR_ITERATOR

#define LBAL_LIBCPP20_CONSTEXPR_ITERATOR

Make more of <iterator> constexpr.

SD-6 equivalent: __cpp_lib_constexpr_iterator >= 201811L. This token will have a value of 0 if the proposal described here is not supported.

  • 201811L P1032R1 Misc constexpr bits
See also
freestanding <iterator>

◆ LBAL_LIBCPP20_CONSTEXPR_MEMORY

#define LBAL_LIBCPP20_CONSTEXPR_MEMORY

Make std::pointer_traits constexpr.

SD-6 equivalent: __cpp_lib_constexpr_memory >= 201811L. Note that __cpp_lib_constexpr_memory 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.

  • 201811L P1006R1 Constexpr in std::pointer_traits
See also
freestanding <memory>

◆ LBAL_LIBCPP20_CONSTEXPR_NUMERIC

#define LBAL_LIBCPP20_CONSTEXPR_NUMERIC

Make numeric algorithms constexpr.

SD-6 equivalent: __cpp_lib_constexpr_numeric >= 201911L. This token will have a value of 0 if the proposal described here is not supported.

  • 201911L P1645R1 constexpr for numeric algorithms
See also
freestanding <numeric>

◆ LBAL_LIBCPP20_CONSTEXPR_STRING

#define LBAL_LIBCPP20_CONSTEXPR_STRING

Make std::string constexpr.

SD-6 equivalent: __cpp_lib_constexpr_string >= 201907L. Note that __cpp_lib_constexpr_string 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.

  • 201907L P0980R1 Making std::string constexpr
See also
<string>

◆ LBAL_LIBCPP20_CONSTEXPR_STRING_PARTIAL

#define LBAL_LIBCPP20_CONSTEXPR_STRING_PARTIAL

Make parts of std::string constexpr.

SD-6 equivalent: __cpp_lib_constexpr_string >= 201811L. Note that __cpp_lib_constexpr_string 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.

  • 201811L P1032R1 Misc constexpr bits
See also
<string>

◆ LBAL_LIBCPP20_CONSTEXPR_STRING_VIEW

#define LBAL_LIBCPP20_CONSTEXPR_STRING_VIEW

Make more of <string_view> constexpr.

SD-6 equivalent: __cpp_lib_constexpr_string_view >= 201811L. Note that __cpp_lib_constexpr_string_view 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.

  • 201811L P1032R1 Misc constexpr bits
See also
<string_view>

◆ LBAL_LIBCPP20_CONSTEXPR_TUPLE

#define LBAL_LIBCPP20_CONSTEXPR_TUPLE

Make more of <tuple> constexpr.

SD-6 equivalent: __cpp_lib_constexpr_tuple >= 201811L. This token will have a value of 0 if the proposal described here is not supported.

  • 201811L P1032R1 Misc constexpr bits
See also
freestanding <tuple>

◆ LBAL_LIBCPP20_CONSTEXPR_UTILITY

#define LBAL_LIBCPP20_CONSTEXPR_UTILITY

Make more of <tuple> constexpr.

SD-6 equivalent: __cpp_lib_constexpr_utility >= 201811L. This token will have a value of 0 if the proposal described here is not supported.

  • 201811L P1032R1 Misc constexpr bits
See also
freestanding <utility>

◆ LBAL_LIBCPP20_CONSTEXPR_VECTOR

#define LBAL_LIBCPP20_CONSTEXPR_VECTOR

Make std::vector constexpr.

SD-6 equivalent: __cpp_lib_constexpr_vector >= 201907L. This token will have a value of 0 if the proposal described here is not supported.

See also
<vector>

◆ LBAL_LIBCPP20_COROUTINE

#define LBAL_LIBCPP20_COROUTINE

Standard Library coroutines.

SD-6 equivalent: __cpp_lib_coroutine >= 201902L. This token will have a value of 0 if the proposal described here is not supported.

  • 201902L LWG3393 Missing/incorrect feature test macro for coroutines
  • 201902L P0912R5 Merge Coroutines TS into C+ +20 working draft
Remarks
Note that <coroutine> requires language support.
See also
<coroutine> freestanding

◆ LBAL_LIBCPP20_COROUTINE_EXP

#define LBAL_LIBCPP20_COROUTINE_EXP

Experimental Standard Library coroutines.

SD-6 equivalent: __cpp_lib_experimental_coroutine >= 201902L. This token will have a value of 0 if the proposal described here is not supported.

Remarks
Note that <coroutine> requires language support.
This was dropped in favor of __cpp_lib_coroutine (LBAL_LIBCPP20_COROUTINE) once acceptance into C++20 was formalized.

◆ LBAL_LIBCPP20_DESTROYING_DELETE

#define LBAL_LIBCPP20_DESTROYING_DELETE

Efficient sized delete for variable-sized classes.

SD-6 equivalent: __cpp_lib_destroying_delete >= 201806L. This token will have a value of 0 if the proposal described here is not supported.

  • 201806L P0722R3 Efficient sized delete for variable sized classes
See also
freestanding <new>

◆ LBAL_LIBCPP20_ENDIAN

#define LBAL_LIBCPP20_ENDIAN

Add std::endian enum.

SD-6 equivalent: __cpp_lib_endian >= 201907L. This token will have a value of 0 if the proposal described here is not supported.

  • 201907L P0463R1 endian, Just endian
See also
<bit> freestanding

◆ LBAL_LIBCPP20_ENDIAN_BIT

#define LBAL_LIBCPP20_ENDIAN_BIT

Relocate std::endian to <bit>.

SD-6 equivalent: __cpp_lib_endian >= 201907L. This token will have a value of 0 if the proposal described here is not supported.

  • 201907L P1612R1 PDF Relocate Endian’s Specification
See also
<bit> freestanding

◆ LBAL_LIBCPP20_ERASE_IF

#define LBAL_LIBCPP20_ERASE_IF

Adopt consistent container erasure.

SD-6 equivalent: __cpp_lib_erase_if >= 201811L. Note that __cpp_lib_erase_if 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.

  • 201811L P1209R0 Adopt Consistent Container Erasure from Library Fundamentals 2 for C++20
See also
<deque> <forward_list> <list> <map> <set> <string> <unordered_map> <unordered_set> <vector>

◆ LBAL_LIBCPP20_ERASE_IF_FREE_FUNCTIONS

#define LBAL_LIBCPP20_ERASE_IF_FREE_FUNCTIONS

Update erase_if free function return types.

SD-6 equivalent: __cpp_lib_erase_if >= 202002L. Note that __cpp_lib_erase_if 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.

  • 202002L P1115R3 PDF Improving the Return Value of Erase-Like Algorithms II: Free erase/erase_if
See also
<deque> <forward_list> <list> <map> <set> <string> <unordered_map> <unordered_set> <vector>

◆ LBAL_LIBCPP20_EXECUTION_VECTORIZATION

#define LBAL_LIBCPP20_EXECUTION_VECTORIZATION

Add target vectorization policies from the Parallelism V2 TS.

SD-6 equivalent: __cpp_lib_execution >= 201902L. Note that __cpp_lib_execution 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.

  • 201902L P1001R2 Target Vectorization Policies from Parallelism V2 TS to C++20
Remarks
(APIME) We do not track experimental versions of this.
See also
<execution>

◆ LBAL_LIBCPP20_FORMAT

#define LBAL_LIBCPP20_FORMAT

Add text formatting functionality to properly replace printf.

SD-6 equivalent: __cpp_lib_format >= 201907L. Note that __cpp_lib_format 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.

  • 201907L P0645R10 Text Formatting
  • 201907L P1361R2 Integration of chrono with text formatting
  • 201907L P1652R1 Printf corner cases in std::format
See also
<format>

◆ LBAL_LIBCPP20_GENERIC_UNORDERED_HASH_LOOKUP

#define LBAL_LIBCPP20_GENERIC_UNORDERED_HASH_LOOKUP

The feature was removed prior to Standardization.

SD-6 equivalent: __cpp_lib_generic_unordered_hash_lookup >= 201902L. This token will have a value of 0 if the proposal described here is not supported.

  • 201902L P0920R2 Precalculated hash values in lookup
Remarks
This is an unusual example of a feature that was voted into the Standard and then promptly voted out.
LBAL_LIBCPP20_GENERIC_UNORDERED_HASH_LOOKUP will always evaluate to 0; it is only here by way of documentation.
See also
<unordered_map> <unordered_set>

◆ LBAL_LIBCPP20_GENERIC_UNORDERED_LOOKUP

#define LBAL_LIBCPP20_GENERIC_UNORDERED_LOOKUP

Heterogeneous lookup for unordered containers.

SD-6 equivalent: __cpp_lib_generic_unordered_lookup >= 201811L. This token will have a value of 0 if the proposal described here is not supported.

  • 201811L P0919R3 Heterogeneous lookup for unordered containers
See also
<unordered_map> <unordered_set>

◆ LBAL_LIBCPP20_INT_POW2

#define LBAL_LIBCPP20_INT_POW2

Integral power-of-2 operations.

SD-6 equivalent: __cpp_lib_int_pow2 >= 201806L. Note that __cpp_lib_int_pow2 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.

  • 201806L P0556R3 Integral power-of- 2 operations
See also
<bit> freestanding

◆ LBAL_LIBCPP20_INT_POW2_FUNCTION_RENAME

#define LBAL_LIBCPP20_INT_POW2_FUNCTION_RENAME

Rename the assorted bit-manipulation fucntions.

SD-6 equivalent: __cpp_lib_int_pow2 >= 202002L. Note that __cpp_lib_int_pow2 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.

  • 202002L P1956R1 On the naming of low-level bit manipulation functions
See also
<bit> freestanding

◆ LBAL_LIBCPP20_INTEGER_COMPARISON_FUNCTIONS

#define LBAL_LIBCPP20_INTEGER_COMPARISON_FUNCTIONS

Add Safe integral comparisons.

SD-6 equivalent: __cpp_lib_integer_comparison_functions >= 202002L. This token will have a value of 0 if the proposal described here is not supported.

  • 202002L P0586R2 Safe integral comparisons
See also
freestanding <utility>

◆ LBAL_LIBCPP20_INTERPOLATE

#define LBAL_LIBCPP20_INTERPOLATE

Add well-behaved interpolation for numbers and pointers.

SD-6 equivalent: __cpp_lib_interpolate >= 201902L. This token will have a value of 0 if the proposal described here is not supported.

  • 201902L P0811R3 Well-behaved interpolation for numbers and pointers
See also
<cmath> <numeric>

◆ LBAL_LIBCPP20_IS_CONSTANT_EVALUATED

#define LBAL_LIBCPP20_IS_CONSTANT_EVALUATED

Add std::is_constant_evaluated type trait.

SD-6 equivalent: __cpp_lib_is_constant_evaluated >= 201811L. This token will have a value of 0 if the proposal described here is not supported.

  • 201811L P0595R2 std::is_constant_evaluated
See also
freestanding <type_traits>

◆ LBAL_LIBCPP20_IS_LAYOUT_COMPATIBLE

#define LBAL_LIBCPP20_IS_LAYOUT_COMPATIBLE

Add std::is_layout_compatible type trait.

SD-6 equivalent: __cpp_lib_is_layout_compatible >= 201907L. This token will have a value of 0 if the proposal described here is not supported.

  • 201907L P0466R5 Layout-compatibility and Pointer-interconvertibility Traits
See also
freestanding <type_traits>

◆ LBAL_LIBCPP20_IS_NOTHROW_CONVERTIBLE

#define LBAL_LIBCPP20_IS_NOTHROW_CONVERTIBLE

Add std::is_nothrow_convertible type trait.

SD-6 equivalent: __cpp_lib_is_nothrow_convertible >= 201806L. This token will have a value of 0 if the proposal described here is not supported.

  • 201806L LWG3356 __cpp_lib_nothrow_convertible should be __cpp_lib_is_nothrow_convertible
  • 201806L P0758R1 Implicit conversion traits and utility functions
Remarks
(SEEME - bitweeder) LWG3356 should probably have gotten its own value; the argument against that is that it was a defect corrected prior to Standardization.
See also
freestanding <type_traits>

◆ LBAL_LIBCPP20_IS_POINTER_INTERCONVERTIBLE

#define LBAL_LIBCPP20_IS_POINTER_INTERCONVERTIBLE

Add std::is_pointer_interconvertible type trait.

SD-6 equivalent: __cpp_lib_is_pointer_interconvertible >= 201907L. This token will have a value of 0 if the proposal described here is not supported.

  • 201907L P0466R5 Layout-compatibility and Pointer-interconvertibility Traits
See also
freestanding <type_traits>

◆ LBAL_LIBCPP20_JTHREAD

#define LBAL_LIBCPP20_JTHREAD

Add a cooperatively interruptible joining thread.

SD-6 equivalent: __cpp_lib_jthread >= 201907L. Note that __cpp_lib_jthread 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.

  • 201907L P0660R10 Stop Token and Joining Thread
See also
<stop_token> <thread>

◆ LBAL_LIBCPP20_JTHREAD_CV

#define LBAL_LIBCPP20_JTHREAD_CV

Simplify condition variable API.

SD-6 equivalent: __cpp_lib_jthread >= 201911L. Note that __cpp_lib_jthread 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.

  • 201911L P1869R1 Rename ‘condition_variable_any’ interruptible wait methods
See also
<stop_token> <thread>

◆ LBAL_LIBCPP20_LATCH

#define LBAL_LIBCPP20_LATCH

Incorporate std::latch from the C++20 Synchronization Library.

SD-6 equivalent: __cpp_lib_latch >= 201907L. This token will have a value of 0 if the proposal described here is not supported.

  • 201907L P1135R6 The C++20 Synchronization Library
See also
<latch>

◆ LBAL_LIBCPP20_LIST_REMOVE_RETURN_TYPE

#define LBAL_LIBCPP20_LIST_REMOVE_RETURN_TYPE

Improve the return value of erase-like algorithms.

SD-6 equivalent: __cpp_lib_list_remove_return_type >= 201806L. This token will have a value of 0 if the proposal described here is not supported.

  • 201806L P0646R1 PDF Improving the Return Value of Erase-Like Algorithms I: list/forward list
See also
<forward_list> <list>

◆ LBAL_LIBCPP20_MATH_CONSTANTS

#define LBAL_LIBCPP20_MATH_CONSTANTS

Add common math constants to the C++ Standard.

SD-6 equivalent: __cpp_lib_math_constants >= 201907L. This token will have a value of 0 if the proposal described here is not supported.

See also
<numbers>

◆ LBAL_LIBCPP20_POLYMORPHIC_ALLOCATOR

#define LBAL_LIBCPP20_POLYMORPHIC_ALLOCATOR

Provide a default template argument for std::polymorphic_allocator.

SD-6 equivalent: __cpp_lib_polymorphic_allocator >= 201902L. This token will have a value of 0 if the proposal described here is not supported.

  • 201902L LWG3437 cpp_lib_polymorphic_allocator is in the wrong header
  • 201902L [P0339R6 __PDF](https://wg21.link/P0339R6) polymorphic_allocator<> as a vocabulary type
See also
<memory_resource>

◆ LBAL_LIBCPP20_RANGES

#define LBAL_LIBCPP20_RANGES

Incorporate ranges into the C++ Standard.

SD-6 equivalent: __cpp_lib_ranges >= 201811L. Note that __cpp_lib_ranges 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.

See also
<algorithm> <functional> <iterator> <memory> <ranges>

◆ LBAL_LIBCPP20_RANGES_INPUT_ADAPTORS

#define LBAL_LIBCPP20_RANGES_INPUT_ADAPTORS

Add input range adaptors.

SD-6 equivalent: __cpp_lib_ranges >= 201907L. Note that __cpp_lib_ranges 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.

See also
<algorithm> <functional> <iterator> <memory> <ranges>

◆ LBAL_LIBCPP20_RANGES_LOOSENED_COMPARE

#define LBAL_LIBCPP20_RANGES_LOOSENED_COMPARE

Loosen the constraints on range-based compare algorithms.

SD-6 equivalent: __cpp_lib_ranges >= 201911L. Note that __cpp_lib_ranges 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.

  • 201911L P1716R3 ranges compare algorithm are over-constrained
See also
<algorithm> <functional> <iterator> <memory> <ranges>

◆ LBAL_LIBCPP20_REMOVE_CVREF

#define LBAL_LIBCPP20_REMOVE_CVREF

Add std::remove_cvref type trait.

SD-6 equivalent: __cpp_lib_remove_cvref >= 201711L. This token will have a value of 0 if the proposal described here is not supported.

  • 201711L P0550R2 PDF Transformation Trait remove_cvref
See also
freestanding <type_traits>

◆ LBAL_LIBCPP20_SEMAPHORE

#define LBAL_LIBCPP20_SEMAPHORE

Incorporate std::semaphore from the C++20 Synchronization Library.

SD-6 equivalent: __cpp_lib_semaphore >= 201907L. This token will have a value of 0 if the proposal described here is not supported.

  • 201907L P1135R6 The C++20 Synchronization Library
See also
<semaphore>

◆ LBAL_LIBCPP20_SHARED_PTR_ARRAYS

#define LBAL_LIBCPP20_SHARED_PTR_ARRAYS

Extend std::make_shared to support C-style arrays.

SD-6 equivalent: __cpp_lib_shared_ptr_arrays >= 201707L. Note that __cpp_lib_shared_ptr_arrays 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.

  • 201707L P0674R1 Extending make_shared to Support Arrays
See also
<memory>

◆ LBAL_LIBCPP20_SHIFT

#define LBAL_LIBCPP20_SHIFT

Add std::shift_left and std::shift_right.

SD-6 equivalent: __cpp_lib_shift >= 201806L. Note that __cpp_lib_shift 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.

  • 201806L P0769R2 Add shift to <algorithm>
See also
<algorithm>

◆ LBAL_LIBCPP20_SMART_PTR_FOR_OVERWRITE

#define LBAL_LIBCPP20_SMART_PTR_FOR_OVERWRITE

Support smart pointer creation with default initialization.

SD-6 equivalent: __cpp_lib_smart_ptr_for_overwrite >= 202002L. This token will have a value of 0 if the proposal described here is not supported.

  • 202002L P1020R1 Smart pointer creation with default initialization
  • 202002L P1973R1 Rename _default_init functions (NB Comment DE002)
Remarks
The SD-6 token was renamed as part of P1973R1, which also updated its value. We don’t track the original.
See also
<memory>

◆ LBAL_LIBCPP20_SOURCE_LOCATION

#define LBAL_LIBCPP20_SOURCE_LOCATION

Adopt std::source_location from the Library Fundamentals V3 TS.

SD-6 equivalent: __cpp_lib_source_location >= 201907L. This token will have a value of 0 if the proposal described here is not supported.

  • 201907L P1208R6 Adopt source location from Library Fundamentals V3 for C++20
See also
freestanding <source_location>

◆ LBAL_LIBCPP20_SPAN

#define LBAL_LIBCPP20_SPAN

Add std::span.

SD-6 equivalent: __cpp_lib_span >= 201803L. Note that __cpp_lib_span 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.

  • 201803L LWG3274 Missing feature test macro for <span>
  • 201803L P0122R7 span: bounds-safe views for sequences of objects
Remarks
The issue raised in LWG3274 was simply that P0122R7 had been voted in without specifying an SD-6 macro.
See also
freestanding <span>

◆ LBAL_LIBCPP20_SPAN_FIXED_SIZE

#define LBAL_LIBCPP20_SPAN_FIXED_SIZE

Fix constructing a fixed-size std::span from a dynamic range.

SD-6 equivalent: __cpp_lib_span >= 202002L. Note that __cpp_lib_span 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.

  • 202002L P1976R2 Fixed-size span construction from dynamic range
See also
freestanding <span>

◆ LBAL_LIBCPP20_SPAN_USABILITY

#define LBAL_LIBCPP20_SPAN_USABILITY

Enhance usability for std::span.

SD-6 equivalent: __cpp_lib_span >= 201902L. Note that __cpp_lib_span 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.

  • 201902L P1024R3 Usability Enhancements for std::span
See also
freestanding <span>

◆ LBAL_LIBCPP20_SSIZE

#define LBAL_LIBCPP20_SSIZE

Add std::ssize and fix std::span’s size return values.

SD-6 equivalent: __cpp_lib_ssize >= 201902L. This token will have a value of 0 if the proposal described here is not supported.

  • 201902L P1227R2 Signed ssize() functions, unsigned size() functions
Remarks
It’s conceivable that the <span>-affecting portions of this will be shifted to the __cpp_lib_span token.
See also
freestanding <iterator>

◆ LBAL_LIBCPP20_STARTS_ENDS_WITH

#define LBAL_LIBCPP20_STARTS_ENDS_WITH

Add string prefix- and suffix-checking.

SD-6 equivalent: __cpp_lib_starts_ends_with >= 201711L. This token will have a value of 0 if the proposal described here is not supported.

  • 201711L P0457R2 String Prefix and Suffix Checking
See also
<string> <string_view>

◆ LBAL_LIBCPP20_STRING_VIEW_CONSTEXPR_ITERATOR

#define LBAL_LIBCPP20_STRING_VIEW_CONSTEXPR_ITERATOR

Add support for constexpr iterators to <string_view>.

SD-6 equivalent: __cpp_lib_string_view >= 201803L. Note that __cpp_lib_string_view 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.

  • 201803L LWG3257 Missing feature testing macro update from P0858
  • 201803L P0858R0 Constexpr iterator requirements
Remarks
The issue raised in LWG3257 was simply that the SD-6 macro update voted in with P0858R0 had not been applied.
See also
<string> <string_view>

◆ LBAL_LIBCPP20_SYNCBUF

#define LBAL_LIBCPP20_SYNCBUF

Add synchronized buffered output streams.

SD-6 equivalent: __cpp_lib_syncbuf >= 201711L. Note that __cpp_lib_syncbuf 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.

  • 201711L P0053R7 PDF C++ Synchronized Buffered Ostream
See also
<iosfwd> <syncstream>

◆ LBAL_LIBCPP20_SYNCBUF_MANIPULATORS

#define LBAL_LIBCPP20_SYNCBUF_MANIPULATORS

Add manipulators for synchronized buffered output streams.

SD-6 equivalent: __cpp_lib_syncbuf >= 201803L. Note that __cpp_lib_syncbuf 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.

  • 201803L P0753R2 PDF Manipulators for C++ Synchronized Buffered Ostream
See also
<iosfwd> <syncstream>

◆ LBAL_LIBCPP20_THREE_WAY_COMPARISON

#define LBAL_LIBCPP20_THREE_WAY_COMPARISON

Add <compare> to the Standard Library.

SD-6 equivalent: __cpp_lib_three_way_comparison >= 201711L. Note that __cpp_lib_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.

  • 201711L P0768R1 PDF Library Support for the Spaceship (Comparison) Operator
See also
<compare> freestanding

◆ LBAL_LIBCPP20_THREE_WAY_COMPARISON_LIBRARY

#define LBAL_LIBCPP20_THREE_WAY_COMPARISON_LIBRARY

Add three-way comparison support to the Standard Library.

SD-6 equivalent: __cpp_lib_three_way_comparison >= 201907L. Note that __cpp_lib_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.

  • 201907L P1614R2 The Mothership Has Landed: Adding <=> to the Library
See also
<compare> freestanding

◆ LBAL_LIBCPP20_TO_ADDRESS

#define LBAL_LIBCPP20_TO_ADDRESS

Provide a utility to convert a pointer to a raw pointer.

SD-6 equivalent: __cpp_lib_to_address >= 201711L. This token will have a value of 0 if the proposal described here is not supported.

  • 201711L P0653R2 PDF Utility to convert a pointer to a raw pointer
See also
freestanding <memory>

◆ LBAL_LIBCPP20_TO_ARRAY

#define LBAL_LIBCPP20_TO_ARRAY

Adopt std::to_array from the Library Fundamentals TS.

SD-6 equivalent: __cpp_lib_to_array >= 201907L. This token will have a value of 0 if the proposal described here is not supported.

  • 201907L P0325R4 to_array from LFTS with updates
See also
<array> freestanding

◆ LBAL_LIBCPP20_TYPE_IDENTITY

#define LBAL_LIBCPP20_TYPE_IDENTITY

Add the std::identity metafunction.

SD-6 equivalent: __cpp_lib_type_identity >= 201806L. This token will have a value of 0 if the proposal described here is not supported.

See also
freestanding <type_traits>

◆ LBAL_LIBCPP20_UNWRAP_REF

#define LBAL_LIBCPP20_UNWRAP_REF

Add std::unwrap_reference and std::unwrap_ref_decay.

SD-6 equivalent: __cpp_lib_unwrap_ref >= 201811L. This token will have a value of 0 if the proposal described here is not supported.

Remarks
Originally, this was in <type_traits>.
See also
freestanding <type_traits>

◆ LBAL_LIBCPP20_VERSION

#define LBAL_LIBCPP20_VERSION

Identifies whether <version> is present and include-able given the current C++ Standard dialect in use.

Unlike <version>, lucenaBAL tracks “correct”, functioning implementations only. For this reason, it is recommended to always favor the lucenaBAL reporting of a given feature’s availability, even when <version> is available.

Remarks
An example of false negative reporting is Xcode (again) always reporting certain library fearures as unavailable when they’re actually gated depending on the version of the SDK in use (e.g., __cpp_lib_to_chars).
An example of false positive reporting in version is older Xcodes’ claim for support for <any> and friends before they were actually working.
Some implementations may choose to back-port <version> to earlier releases, in which case this token will be set.

◆ LBAL_LIBCPP23_ADAPTOR_ITERATOR_PAIR_CONSTRUCTOR

#define LBAL_LIBCPP23_ADAPTOR_ITERATOR_PAIR_CONSTRUCTOR

Iterators pair constructors for stack and queue.

SD-6 equivalent: __cpp_lib_adaptor_iterator_pair_constructor >= 202106L. This token will have a value of 0 if the proposal described here is not supported.

  • 202106L P1425R4 PDF Iterators pair constructors for stack and queue
See also
<queue> <stack>

◆ LBAL_LIBCPP23_ALGORITHM_ITERATOR_REQUIREMENTS

#define LBAL_LIBCPP23_ALGORITHM_ITERATOR_REQUIREMENTS

Ranges iterators as inputs to non-Ranges algorithms.

SD-6 equivalent: __cpp_lib_algorithm_iterator_requirements >= 202207L. This token will have a value of 0 if the proposal described here is not supported.

  • 202207L P2408R5 PDF Ranges iterators as inputs to non-Ranges algorithms
See also
<algorithm> <memory> <numeric>

◆ LBAL_LIBCPP23_ALLOCATE_AT_LEAST

#define LBAL_LIBCPP23_ALLOCATE_AT_LEAST

Provide size feedback in the Allocator interface.

SD-6 equivalent: __cpp_lib_allocate_at_least >= 202106L. Note that __cpp_lib_allocate_at_least 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.

  • 202106L P0401R6 Providing size feedback in the Allocator interface
See also
<memory>

◆ LBAL_LIBCPP23_ALLOCATE_AT_LEAST_DISALLOW_USER_SPEC

#define LBAL_LIBCPP23_ALLOCATE_AT_LEAST_DISALLOW_USER_SPEC

Disallow user specialization of allocator_traits.

SD-6 equivalent: __cpp_lib_allocate_at_least >= 202302L. Note that __cpp_lib_allocate_at_least 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.

  • 202302L LWG3887 Version macro for allocate_at_least
  • 202302L P2652R2 Disallow user specialization of allocator_traits
See also
<memory>

◆ LBAL_LIBCPP23_ASSOCIATIVE_HETEROGENEOUS_ERASURE

#define LBAL_LIBCPP23_ASSOCIATIVE_HETEROGENEOUS_ERASURE

Heterogeneous erasure overloads for associative containers.

SD-6 equivalent: __cpp_lib_associative_heterogeneous_erasure >= 202110L. This token will have a value of 0 if the proposal described here is not supported.

  • 202110L P2077R3 Heterogeneous erasure overloads for associative containers
See also
<map> <set> <unordered_map> <unordered_set>

◆ LBAL_LIBCPP23_BARRIER_RELAXED_COMPLETION

#define LBAL_LIBCPP23_BARRIER_RELAXED_COMPLETION

Relax std::barrier phase completion step guarantees.

SD-6 equivalent: __cpp_lib_barrier >= 202302L. Note that __cpp_lib_barrier 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.

  • 202302L P2588R3 Relax std::barrier phase completion step guarantees
See also
<barrier>

◆ LBAL_LIBCPP23_BIND_BACK

#define LBAL_LIBCPP23_BIND_BACK

Pipe support for user-defined range adaptors.

SD-6 equivalent: __cpp_lib_bind_back >= 202202L. Note that __cpp_lib_bind_back 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.

  • 202202L P2387R3 Pipe support for user-defined range adaptors
See also
freestanding <functional>

◆ LBAL_LIBCPP23_BYTESWAP

#define LBAL_LIBCPP23_BYTESWAP

Byteswapping for fun&&nuf.

SD-6 equivalent: __cpp_lib_byteswap >= 202110L. This token will have a value of 0 if the proposal described here is not supported.

  • 202110L P1272R4 Byteswapping for fun&&nuf
See also
<bit> freestanding

◆ LBAL_LIBCPP23_COMMON_REFERENCE

#define LBAL_LIBCPP23_COMMON_REFERENCE

common_reference_t of reference_wrapper Should Be a Reference Type

SD-6 equivalent: __cpp_lib_common_reference >= 202302L. This token will have a value of 0 if the proposal described here is not supported.

  • 202302L P2655R3 common_reference_t of reference_wrapper Should Be a Reference Type
See also
freestanding <type_traits>

◆ LBAL_LIBCPP23_COMMON_REFERENCE_WRAPPER

#define LBAL_LIBCPP23_COMMON_REFERENCE_WRAPPER

common_reference_t of reference_wrapper Should Be a Reference Type

SD-6 equivalent: __cpp_lib_common_reference_wrapper >= 202302L. This token will have a value of 0 if the proposal described here is not supported.

  • 202302L P2655R3 common_reference_t of reference_wrapper Should Be a Reference Type
See also
freestanding <functional>

◆ LBAL_LIBCPP23_CONCEPTS_MOVE_ONLY

#define LBAL_LIBCPP23_CONCEPTS_MOVE_ONLY

Add move-only types for equality_comparable_with, totally_ordered_with, and three_way_comparable_with.

SD-6 equivalent: __cpp_lib_concepts >= 202207L. Note that __cpp_lib_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.

  • 202207L P2404R3 Move-only types for equality_comparable_with, totally_ordered_with, and three_way_comparable_with
See also
<compare> <concepts> freestanding

◆ LBAL_LIBCPP23_CONSTEXPR_BITSET

#define LBAL_LIBCPP23_CONSTEXPR_BITSET

A more constexpr bitset.

SD-6 equivalent: __cpp_lib_constexpr_bitset >= 202207L. This token will have a value of 0 if the proposal described here is not supported.

  • 202207L P2417R2 A more constexpr bitset
See also
<bitset>

◆ LBAL_LIBCPP23_CONSTEXPR_CHARCONV

#define LBAL_LIBCPP23_CONSTEXPR_CHARCONV

Add Constexpr Modifiers to Functions to_chars and from_chars for Integral Types in Header.

SD-6 equivalent: __cpp_lib_constexpr_charconv >= 202207L. This token will have a value of 0 if the proposal described here is not supported.

  • 202207L P2291R3 Add Constexpr Modifiers to Functions to_chars and from_chars for Integral Types in Header
See also
<charconv> freestanding

◆ LBAL_LIBCPP23_CONSTEXPR_CMATH

#define LBAL_LIBCPP23_CONSTEXPR_CMATH

constexpr for cmath and cstdlib

SD-6 equivalent: __cpp_lib_constexpr_cmath >= 202202L. Note that __cpp_lib_constexpr_cmath 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.

  • 202202L P0533R9 constexpr for cmath and cstdlib
See also
<cmath> <cstdlib>

◆ LBAL_LIBCPP23_CONSTEXPR_MEMORY_UNIQUE_PTR

#define LBAL_LIBCPP23_CONSTEXPR_MEMORY_UNIQUE_PTR

Make std::unique_ptr constexpr.

SD-6 equivalent: __cpp_lib_constexpr_memory >= 202202L. Note that __cpp_lib_constexpr_memory 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.

  • 202202L P2273R3 Making std::unique_ptr constexpr
See also
freestanding <memory>

◆ LBAL_LIBCPP23_CONSTEXPR_TYPEINFO

#define LBAL_LIBCPP23_CONSTEXPR_TYPEINFO

Making std::type_info::operator== constexpr.

SD-6 equivalent: __cpp_lib_constexpr_typeinfo >= 202106L. This token will have a value of 0 if the proposal described here is not supported.

  • 202106L P1328R1 Making std::type_info::operator== constexpr
See also
freestanding <typeinfo>

◆ LBAL_LIBCPP23_CONTAINERS_RANGES

#define LBAL_LIBCPP23_CONTAINERS_RANGES

Conversions from ranges to containers.

SD-6 equivalent: __cpp_lib_containers_ranges >= 202202L. This token will have a value of 0 if the proposal described here is not supported.

  • 202202L P1206R7 Conversions from ranges to containers
See also
<deque> <forward_list> <list> <map> <queue> <set> <stack> <string> <unordered_map> <unordered_set> <vector>

◆ LBAL_LIBCPP23_EXPECTED

#define LBAL_LIBCPP23_EXPECTED

std::expected

SD-6 equivalent: __cpp_lib_expected >= 202202L. Note that __cpp_lib_expected 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.

See also
<expected>

◆ LBAL_LIBCPP23_EXPECTED_MONADIC

#define LBAL_LIBCPP23_EXPECTED_MONADIC

Monadic Functions for std::expected.

SD-6 equivalent: __cpp_lib_expected >= 202211L. Note that __cpp_lib_expected 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.

  • 202211L P2505R5 Monadic Functions for std::expected
See also
<expected>

◆ LBAL_LIBCPP23_FLAT_MAP

#define LBAL_LIBCPP23_FLAT_MAP

A Standard flat_map.

SD-6 equivalent: __cpp_lib_flat_map >= 202207L. Note that __cpp_lib_flat_map 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.

  • 202207L P0429R9 A Standard flat_map
See also
<flat_map>

◆ LBAL_LIBCPP23_FLAT_SET

#define LBAL_LIBCPP23_FLAT_SET

A Standard flat_set.

SD-6 equivalent: __cpp_lib_flat_set >= 202207L. Note that __cpp_lib_flat_set 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.

  • 202207L LWG3751 Missing feature macro for flat_set
  • 202207L P1222R4 A Standard flat_set
See also
<flat_set>

◆ LBAL_LIBCPP23_FORMAT

#define LBAL_LIBCPP23_FORMAT

Add std::format improvements.

SD-6 equivalent: __cpp_lib_format >= 202106L. Note that __cpp_lib_format 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.

  • 202106L P2216R3 std::format improvements
See also
<format>

◆ LBAL_LIBCPP23_FORMAT_BASIC_FORMAT_STRING

#define LBAL_LIBCPP23_FORMAT_BASIC_FORMAT_STRING

Exposing std::basic_format_string.

SD-6 equivalent: __cpp_lib_format >= 202207L. Note that __cpp_lib_format 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.

  • 202207L P2508R1 Exposing std::basic-format- string
Remarks
This and LBAL_LIBCPP23_FORMAT_ENCODINGS were voted in at the same time and share the same SD-6 token and value; however, we track them as separate features.
See also
<format>

◆ LBAL_LIBCPP23_FORMAT_ENCODINGS

#define LBAL_LIBCPP23_FORMAT_ENCODINGS

Clarify encoding handling in localized formatting of <chrono> types.

SD-6 equivalent: __cpp_lib_format >= 202207L. Note that __cpp_lib_format 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.

  • 202207L P2419R2 Clarify handling of encodings in localized formatting of chrono types
Remarks
This and LBAL_LIBCPP23_FORMAT_BASIC_FORMAT_STRING were voted in at the same time and share the same SD-6 token and value; however, we track them as separate features.
See also
<format>

◆ LBAL_LIBCPP23_FORMAT_GENERATOR

#define LBAL_LIBCPP23_FORMAT_GENERATOR

Add support for std::generator-like types to std::format.

SD-6 equivalent: __cpp_lib_format >= 202110L. Note that __cpp_lib_format 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.

  • 202110L P2418R2 Add support for std::generator-like types to std::format
Remarks
This and LBAL_LIBCPP23_FORMAT_LOCALE were voted in at the same time and share the same SD-6 token and value; however, we track them as separate features.
See also
<format>

◆ LBAL_LIBCPP23_FORMAT_LOCALE

#define LBAL_LIBCPP23_FORMAT_LOCALE

Fix locale handling in std::chrono formatters.

SD-6 equivalent: __cpp_lib_format >= 202110L. Note that __cpp_lib_format 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.

  • 202110L P2372R3 Fixing locale handling in chrono formatters
Remarks
This and LBAL_LIBCPP23_FORMAT_GENERATOR were voted in at the same time and share the same SD-6 token and value; however, we track them as separate features.
See also
<format>

◆ LBAL_LIBCPP23_FORMAT_RANGES

#define LBAL_LIBCPP23_FORMAT_RANGES

Formatting Ranges.

SD-6 equivalent: __cpp_lib_format_ranges >= 202207L. This token will have a value of 0 if the proposal described here is not supported.

  • 202207L LWG3750 Too many papers bump __cpp_lib_format
  • 202207L P2286R8 Formatting Ranges
  • 202207L P2585R1 Improving default container formatting
See also
<format>

◆ LBAL_LIBCPP23_FORMATTERS

#define LBAL_LIBCPP23_FORMATTERS

Formatting thread::id and stacktrace.

SD-6 equivalent: __cpp_lib_formatters >= 202302L. This token will have a value of 0 if the proposal described here is not supported.

  • 202302L P2693R1 Formatting thread::id and stacktrace
See also
<stacktrace> <thread>

◆ LBAL_LIBCPP23_FORWARD_LIKE

#define LBAL_LIBCPP23_FORWARD_LIKE

forward_like

SD-6 equivalent: __cpp_lib_forward_like >= 202207L. This token will have a value of 0 if the proposal described here is not supported.

See also
freestanding <utility>

◆ LBAL_LIBCPP23_GENERATOR

#define LBAL_LIBCPP23_GENERATOR

std::generator: Synchronous Coroutine Generator for Ranges

SD-6 equivalent: __cpp_lib_generator >= 202207L. This token will have a value of 0 if the proposal described here is not supported.

  • 202207L P2502R2 std::generator: Synchronous Coroutine Generator for Ranges
See also
<generator>

◆ LBAL_LIBCPP23_INVOKE_R

#define LBAL_LIBCPP23_INVOKE_R

invoke_r

SD-6 equivalent: __cpp_lib_invoke_r >= 202106L. This token will have a value of 0 if the proposal described here is not supported.

See also
freestanding <functional>

◆ LBAL_LIBCPP23_IOS_NOREPLACE

#define LBAL_LIBCPP23_IOS_NOREPLACE

Support exclusive mode for fstreams.

SD-6 equivalent: __cpp_lib_ios_noreplace >= 202207L. This token will have a value of 0 if the proposal described here is not supported.

  • 202207L P2467R1 Support exclusive mode for fstreams
See also
<ios>

◆ LBAL_LIBCPP23_IS_IMPLICIT_LIFETIME

#define LBAL_LIBCPP23_IS_IMPLICIT_LIFETIME

A trait for implicit lifetime types.

SD-6 equivalent: __cpp_lib_is_implicit_lifetime >= 202302L. This token will have a value of 0 if the proposal described here is not supported.

  • 202302L P2674R1 A trait for implicit lifetime types
See also
freestanding <type_traits>

◆ LBAL_LIBCPP23_IS_SCOPED_ENUM

#define LBAL_LIBCPP23_IS_SCOPED_ENUM

A proposal for a type trait to detect scoped enumerations.

SD-6 equivalent: __cpp_lib_is_scoped_enum >= 202011L. This token will have a value of 0 if the proposal described here is not supported.

  • 202011L P1048R1 A proposal for a type trait to detect scoped enumerations
See also
freestanding <type_traits>

◆ LBAL_LIBCPP23_MDSPAN

#define LBAL_LIBCPP23_MDSPAN

mdspan

SD-6 equivalent: __cpp_lib_mdspan >= 202207L. Note that __cpp_lib_mdspan 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.

  • 202207L P0009R18 MDSPAN
  • 202207L P2599R2 index _type & size_type in mdspan
  • 202207L P2604R0 MDSPAN: rename pointer and contiguous
  • 202207L P2613R1 Add the missing empty to mdspan
See also
freestanding <mdspan>

◆ LBAL_LIBCPP23_MODULES

#define LBAL_LIBCPP23_MODULES

Standard Library Modules std and std.compat.

SD-6 equivalent: __cpp_lib_modules >= 202207L. This token will have a value of 0 if the proposal described here is not supported.

  • 202207L P2465R3 Standard Library Modules std and std.compat
See also
freestanding

◆ LBAL_LIBCPP23_MONADIC_OPTIONAL

#define LBAL_LIBCPP23_MONADIC_OPTIONAL

Add monadic operations for std::optional.

SD-6 equivalent: __cpp_lib_monadic_optional >= 202110L. This token will have a value of 0 if the proposal described here is not supported.

  • 202110L P0798R8 Monadic operations for std::optional
See also
<optional>

◆ LBAL_LIBCPP23_MOVE_ITERATOR_CONCEPT

#define LBAL_LIBCPP23_MOVE_ITERATOR_CONCEPT

move_iterator should be a random access iterator

SD-6 equivalent: __cpp_lib_move_iterator_concept >= 202207L. This token will have a value of 0 if the proposal described here is not supported.

  • 202207L P2520R0 move_iterator should be a random access iterator
See also
freestanding <iterator>

◆ LBAL_LIBCPP23_MOVE_ONLY_FUNCTION

#define LBAL_LIBCPP23_MOVE_ONLY_FUNCTION

move_only_function (was any_invocable)

SD-6 equivalent: __cpp_lib_move_only_function >= 202110L. This token will have a value of 0 if the proposal described here is not supported.

  • 202110L P0288R9 move_only_function (was any_invocable)
See also
<functional>

◆ LBAL_LIBCPP23_OPTIONAL_CONSTEXPR

#define LBAL_LIBCPP23_OPTIONAL_CONSTEXPR

Add further constexpr support for std::optional.

SD-6 equivalent: __cpp_lib_optional >= 202106L. Note that __cpp_lib_optional 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.

  • 202106L P2231R1 Add further constexpr support for optional/variant
See also
<optional>

◆ LBAL_LIBCPP23_OPTIONAL_MONADIC

#define LBAL_LIBCPP23_OPTIONAL_MONADIC

Add monadic operations for std::optional.

SD-6 equivalent: __cpp_lib_optional >= 202110L. Note that __cpp_lib_optional 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.

  • 202110L LWG3621 Remove feature-test macro __cpp_lib_monadic_optional
  • 202110L P0798R8 Monadic operations for std::optional
Remarks
Note that this is mostly about p0798r8; lwg3621 was an SD-6 administrative fixup for an oversight in the approval process for p0798r8.
See also
<optional>

◆ LBAL_LIBCPP23_OUT_PTR

#define LBAL_LIBCPP23_OUT_PTR

out_ptr - a scalable output pointer abstraction

SD-6 equivalent: __cpp_lib_out_ptr >= 202106L. Note that __cpp_lib_out_ptr 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.

  • 202106L P1132R7 out_ptr - a scalable output pointer abstraction
See also
freestanding <memory>

◆ LBAL_LIBCPP23_PRINT

#define LBAL_LIBCPP23_PRINT

Formatted output.

SD-6 equivalent: __cpp_lib_print >= 202207L. Note that __cpp_lib_print 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.

See also
<ostream> <print>

◆ LBAL_LIBCPP23_RANGES_AS_CONST

#define LBAL_LIBCPP23_RANGES_AS_CONST

cbegin should always return a constant iterator

SD-6 equivalent: __cpp_lib_ranges_as_const >= 202207L. Note that __cpp_lib_ranges_as_const 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.

  • 202207L P2278R4 cbegin should always return a constant iterator
See also
freestanding <ranges>

◆ LBAL_LIBCPP23_RANGES_AS_RVALUE

#define LBAL_LIBCPP23_RANGES_AS_RVALUE

views::as_rvalue

SD-6 equivalent: __cpp_lib_ranges_as_rvalue >= 202207L. This token will have a value of 0 if the proposal described here is not supported.

See also
freestanding <ranges>

◆ LBAL_LIBCPP23_RANGES_CARTESIAN_PRODUCT

#define LBAL_LIBCPP23_RANGES_CARTESIAN_PRODUCT

views::cartesian_product

SD-6 equivalent: __cpp_lib_ranges_cartesian_product >= 202207L. This token will have a value of 0 if the proposal described here is not supported.

  • 202207L P2374R4 views::cartesian_product
See also
freestanding <ranges>

◆ LBAL_LIBCPP23_RANGES_CARTESIAN_PRODUCT_EMPTY

#define LBAL_LIBCPP23_RANGES_CARTESIAN_PRODUCT_EMPTY

Empty Product for certain Views.

SD-6 equivalent: __cpp_lib_ranges_cartesian_product >= 202207L. This token will have a value of 0 if the proposal described here is not supported.

  • 202207L P2540R1 Empty Product for certain Views
See also
freestanding <ranges>

◆ LBAL_LIBCPP23_RANGES_CHUNK

#define LBAL_LIBCPP23_RANGES_CHUNK

Windowing range adaptors: views::chunk and views::slide.

SD-6 equivalent: __cpp_lib_ranges_chunk >= 202202L. This token will have a value of 0 if the proposal described here is not supported.

  • 202202L P2442R1 Windowing range adaptors: views::chunk and views::slide
See also
freestanding <ranges>

◆ LBAL_LIBCPP23_RANGES_CHUNK_BY

#define LBAL_LIBCPP23_RANGES_CHUNK_BY

views::chunk_by

SD-6 equivalent: __cpp_lib_ranges_chunk_by >= 202202L. This token will have a value of 0 if the proposal described here is not supported.

See also
freestanding <ranges>

◆ LBAL_LIBCPP23_RANGES_CONTAINS

#define LBAL_LIBCPP23_RANGES_CONTAINS

std::ranges::contains

SD-6 equivalent: __cpp_lib_ranges_contains >= 202207L. This token will have a value of 0 if the proposal described here is not supported.

  • 202207L P2302R4 std::ranges::contains
See also
<algorithm> freestanding

◆ LBAL_LIBCPP23_RANGES_ENUMERATE

#define LBAL_LIBCPP23_RANGES_ENUMERATE

views::enumerate

SD-6 equivalent: __cpp_lib_ranges_enumerate >= 202302L. This token will have a value of 0 if the proposal described here is not supported.

See also
freestanding <ranges>

◆ LBAL_LIBCPP23_RANGES_FIND_LAST

#define LBAL_LIBCPP23_RANGES_FIND_LAST

find_last

SD-6 equivalent: __cpp_lib_ranges_find_last >= 202207L. This token will have a value of 0 if the proposal described here is not supported.

  • 202207L LWG3807 The feature test macro for ranges::find_last should be renamed
  • 202207L P1223R5 find_last
See also
<algorithm> freestanding

◆ LBAL_LIBCPP23_RANGES_FOLD

#define LBAL_LIBCPP23_RANGES_FOLD

ranges::fold

SD-6 equivalent: __cpp_lib_ranges_fold >= 202207L. This token will have a value of 0 if the proposal described here is not supported.

See also
<algorithm> freestanding

◆ LBAL_LIBCPP23_RANGES_FORMALIZED_VIEW

#define LBAL_LIBCPP23_RANGES_FORMALIZED_VIEW

What is a view?

SD-6 equivalent: __cpp_lib_ranges >= 202110L. Note that __cpp_lib_ranges 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.

See also
<algorithm> <functional> <iterator> <memory> <ranges>

◆ LBAL_LIBCPP23_RANGES_IOTA

#define LBAL_LIBCPP23_RANGES_IOTA

ranges::iota, ranges::shift_left, and ranges::shift_right

SD-6 equivalent: __cpp_lib_ranges_iota >= 202202L. This token will have a value of 0 if the proposal described here is not supported.

  • 202202L P2440R1 ranges::iota, ranges::shift_left, and ranges::shift_right
See also
freestanding <numeric>

◆ LBAL_LIBCPP23_RANGES_JOIN_WITH

#define LBAL_LIBCPP23_RANGES_JOIN_WITH

views::join_with

SD-6 equivalent: __cpp_lib_ranges_join_with >= 202202L. This token will have a value of 0 if the proposal described here is not supported.

See also
freestanding <ranges>

◆ LBAL_LIBCPP23_RANGES_NON_DEFAULT_CONSTRUCTIBLE

#define LBAL_LIBCPP23_RANGES_NON_DEFAULT_CONSTRUCTIBLE

Views should not be required to be default constructible.

SD-6 equivalent: __cpp_lib_ranges >= 202106L. Note that __cpp_lib_ranges 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.

  • 202106L P2325R3 Views should not be required to be default constructible
See also
<algorithm> <functional> <iterator> <memory> <ranges>

◆ LBAL_LIBCPP23_RANGES_RELAXED

#define LBAL_LIBCPP23_RANGES_RELAXED

Relaxing Ranges Just A Smidge.

SD-6 equivalent: __cpp_lib_ranges >= 202302L. Note that __cpp_lib_ranges 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.

  • 202302L P2609R3 Relaxing Ranges Just A Smidge
See also
<algorithm> <functional> <iterator> <memory> <ranges>

◆ LBAL_LIBCPP23_RANGES_REMOVE_POISON_PILLS

#define LBAL_LIBCPP23_RANGES_REMOVE_POISON_PILLS

Poison Pills are Too Toxic.

SD-6 equivalent: __cpp_lib_ranges >= 202211L. Note that __cpp_lib_ranges 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.

  • 202211L P2602R2 Poison Pills are Too Toxic
See also
<algorithm> <functional> <iterator> <memory> <ranges>

◆ LBAL_LIBCPP23_RANGES_REPEAT

#define LBAL_LIBCPP23_RANGES_REPEAT

views::repeat

SD-6 equivalent: __cpp_lib_ranges_repeat >= 202207L. This token will have a value of 0 if the proposal described here is not supported.

See also
freestanding <ranges>

◆ LBAL_LIBCPP23_RANGES_SLIDE

#define LBAL_LIBCPP23_RANGES_SLIDE

Windowing range adaptors: views::chunk and views::slide.

SD-6 equivalent: __cpp_lib_ranges_slide >= 202202L. This token will have a value of 0 if the proposal described here is not supported.

  • 202202L P2442R1 Windowing range adaptors: views::chunk and views::slide
See also
freestanding <ranges>

◆ LBAL_LIBCPP23_RANGES_STARTS_ENDS_WITH

#define LBAL_LIBCPP23_RANGES_STARTS_ENDS_WITH

starts_with and ends_with

SD-6 equivalent: __cpp_lib_ranges_starts_ends_with >= 202106L. This token will have a value of 0 if the proposal described here is not supported.

  • 202106L P1659R3 starts_with and ends_with
See also
<algorithm> freestanding

◆ LBAL_LIBCPP23_RANGES_STRIDE

#define LBAL_LIBCPP23_RANGES_STRIDE

stride_view

SD-6 equivalent: __cpp_lib_ranges_stride >= 202207L. This token will have a value of 0 if the proposal described here is not supported.

See also
freestanding <ranges>

◆ LBAL_LIBCPP23_RANGES_SUPPORT_MOVE_ONLY_TYPES

#define LBAL_LIBCPP23_RANGES_SUPPORT_MOVE_ONLY_TYPES

Relaxing range adaptors to allow for move only types.

SD-6 equivalent: __cpp_lib_ranges >= 202207L. Note that __cpp_lib_ranges 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.

  • 202207L P2494R2 Relaxing range adaptors to allow for move only types
See also
<algorithm> <functional> <iterator> <memory> <ranges>

◆ LBAL_LIBCPP23_RANGES_TO_CONTAINER

#define LBAL_LIBCPP23_RANGES_TO_CONTAINER

Conversions from ranges to containers.

SD-6 equivalent: __cpp_lib_ranges_to_container >= 202202L. This token will have a value of 0 if the proposal described here is not supported.

  • 202202L P1206R7 Conversions from ranges to containers
See also
freestanding <ranges>

◆ LBAL_LIBCPP23_RANGES_USER_ADAPTOR_PIPES

#define LBAL_LIBCPP23_RANGES_USER_ADAPTOR_PIPES

Pipe support for user-defined range adaptors.

SD-6 equivalent: __cpp_lib_ranges >= 202202L. Note that __cpp_lib_ranges 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.

  • 202202L P2387R3 Pipe support for user-defined range adaptors
See also
<algorithm> <functional> <iterator> <memory> <ranges>

◆ LBAL_LIBCPP23_RANGES_ZIP

#define LBAL_LIBCPP23_RANGES_ZIP

zip

SD-6 equivalent: __cpp_lib_ranges_zip >= 202110L. This token will have a value of 0 if the proposal described here is not supported.

See also
freestanding <ranges> <tuple> <utility>

◆ LBAL_LIBCPP23_REFERENCE_FROM_TEMPORARY

#define LBAL_LIBCPP23_REFERENCE_FROM_TEMPORARY

A type trait to detect reference binding to temporary.

SD-6 equivalent: __cpp_lib_reference_from_temporary >= 202202L. This token will have a value of 0 if the proposal described here is not supported.

  • 202202L P2255R2 A type trait to detect reference binding to temporary
See also
freestanding <type_traits>

◆ LBAL_LIBCPP23_SHIFT_RANGES

#define LBAL_LIBCPP23_SHIFT_RANGES

ranges::iota, ranges::shift_left, and ranges::shift_right

SD-6 equivalent: __cpp_lib_shift >= 202202L. Note that __cpp_lib_shift 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.

  • 202202L P2440R1 ranges::iota, ranges::shift_left, and ranges::shift_right
See also
<algorithm>

◆ LBAL_LIBCPP23_SPANSTREAM

#define LBAL_LIBCPP23_SPANSTREAM

A strstream replacement using span as buffer.

SD-6 equivalent: __cpp_lib_spanstream >= 202106L. This token will have a value of 0 if the proposal described here is not supported.

  • 202106L P0448R4 A strstream replacement using span as buffer
See also
<iosfwd> <spanstream>

◆ LBAL_LIBCPP23_STACKTRACE

#define LBAL_LIBCPP23_STACKTRACE

A Proposal to add stacktrace library.

SD-6 equivalent: __cpp_lib_stacktrace >= 202011L. This token will have a value of 0 if the proposal described here is not supported.

  • 202011L P0881R7 A Proposal to add stacktrace library
See also
<stacktrace>

◆ LBAL_LIBCPP23_START_LIFETIME_AS

#define LBAL_LIBCPP23_START_LIFETIME_AS

Explicit lifetime management.

SD-6 equivalent: __cpp_lib_start_lifetime_as >= 202207L. This token will have a value of 0 if the proposal described here is not supported.

  • 202207L P2590R2 Explicit lifetime management
See also
freestanding <memory>

◆ LBAL_LIBCPP23_STDATOMIC_H

#define LBAL_LIBCPP23_STDATOMIC_H

Support C atomics in C++.

SD-6 equivalent: __cpp_lib_stdatomic_h >= 202011L. This token will have a value of 0 if the proposal described here is not supported.

  • 202011L P0943R6 Support C atomics in C++
See also
<stdatomic.h>

◆ LBAL_LIBCPP23_STRING_CONTAINS

#define LBAL_LIBCPP23_STRING_CONTAINS

String Contains function.

SD-6 equivalent: __cpp_lib_string_contains >= 202011L. This token will have a value of 0 if the proposal described here is not supported.

  • 202011L P1679R3 String Contains function
See also
<string> <string_view>

◆ LBAL_LIBCPP23_STRING_RESIZE_AND_OVERWRITE

#define LBAL_LIBCPP23_STRING_RESIZE_AND_OVERWRITE

basic_string::resize_and_overwrite

SD-6 equivalent: __cpp_lib_string_resize_and_overwrite >= 202110L. This token will have a value of 0 if the proposal described here is not supported.

  • 202110L P1072R10 basic_string::resize_and_overwrite
See also
<string>

◆ LBAL_LIBCPP23_TO_UNDERLYING

#define LBAL_LIBCPP23_TO_UNDERLYING

std::to_underlying

SD-6 equivalent: __cpp_lib_to_underlying >= 202102L. This token will have a value of 0 if the proposal described here is not supported.

  • 202102L P1682R2 std::to_underlying
See also
freestanding <utility>

◆ LBAL_LIBCPP23_TUPLE_LIKE

#define LBAL_LIBCPP23_TUPLE_LIKE

Compatibility between tuple, pair and tuple-like objects.

SD-6 equivalent: __cpp_lib_tuple_like >= 202207L. Note that __cpp_lib_tuple_like 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.

  • 202207L P2165R4 Compatibility between tuple, pair and tuple-like objects
See also
<map> <tuple> <unordered_map> <utility>

◆ LBAL_LIBCPP23_UNREACHABLE

#define LBAL_LIBCPP23_UNREACHABLE

Function to mark unreachable code.

SD-6 equivalent: __cpp_lib_unreachable >= 202202L. This token will have a value of 0 if the proposal described here is not supported.

  • 202202L P0627R6 Function to mark unreachable code
See also
freestanding <utility>

◆ LBAL_LIBCPP23_VARIANT_CONSTEXPR

#define LBAL_LIBCPP23_VARIANT_CONSTEXPR

Add further constexpr support for std::variant.

SD-6 equivalent: __cpp_lib_variant >= 202106L. Note that __cpp_lib_variant 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.

  • 202106L P2231R1 Add further constexpr support for optional/variant
See also
<variant>

◆ LBAL_LIBCPP23_VARIANT_INHERITANCE

#define LBAL_LIBCPP23_VARIANT_INHERITANCE

Address inheriting from std::variant.

SD-6 equivalent: __cpp_lib_variant >= 202102L. Note that __cpp_lib_variant 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.

  • 202102L P2162R2 Inheriting from std::variant (resolving LWG3052)
See also
<variant>

◆ LBAL_LIBCPP26_ALGORITHM_DEFAULT_VALUE_TYPE

#define LBAL_LIBCPP26_ALGORITHM_DEFAULT_VALUE_TYPE

Adjoints to 'Enabling list-initialization for algorithms': find_last and uninitialized_fill.

SD-6 equivalent: __cpp_lib_algorithm_default_value_type >= 202603L. This token will have a value of 0 if the proposal described here is not supported.

  • 202603L P3217R0 Adjoints to "Enabling list- initialization for algorithms": find_last
  • 202603L P3787R2 Adjoints to "Enabling list- initialization for algorithms": uninitialized_fill
See also
<algorithm> <deque> <forward_list> <list> <memory> <ranges> <string> <vector>

◆ LBAL_LIBCPP26_ALIGNED_ACCESSOR

#define LBAL_LIBCPP26_ALIGNED_ACCESSOR

An mdspan accessor expressing pointer overalignment.

SD-6 equivalent: __cpp_lib_aligned_accessor >= 202411L. This token will have a value of 0 if the proposal described here is not supported.

  • 202411L P2897R7 aligned_accessor: An mdspan accessor expressing pointer overalignment
See also
freestanding <mdspan>

◆ LBAL_LIBCPP26_ASSOCIATIVE_HETEROGENEOUS_INSERTION

#define LBAL_LIBCPP26_ASSOCIATIVE_HETEROGENEOUS_INSERTION

Extending associative containers with the remaining heterogeneous overloads.

SD-6 equivalent: __cpp_lib_associative_heterogeneous_insertion >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P2363R5 Extending associative containers with the remaining heterogeneous overloads
See also
<map> <set> <unordered_map> <unordered_set>

◆ LBAL_LIBCPP26_ATOMIC_MIN_MAX

#define LBAL_LIBCPP26_ATOMIC_MIN_MAX

Atomic maximum/minimum.

SD-6 equivalent: __cpp_lib_atomic_min_max >= 202403L. Note that __cpp_lib_atomic_min_max 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.

  • 202403L P0493R5 Atomic maximum/minimum
See also
<atomic> freestanding

◆ LBAL_LIBCPP26_ATOMIC_MIN_MAX_FLOAT

#define LBAL_LIBCPP26_ATOMIC_MIN_MAX_FLOAT

Atomic floating-point min/max.

SD-6 equivalent: __cpp_lib_atomic_min_max >= 202506L. Note that __cpp_lib_atomic_min_max 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.

  • 202506L P3008R6 Atomic floating-point min/max
See also
<atomic> freestanding

◆ LBAL_LIBCPP26_ATOMIC_REDUCTIONS

#define LBAL_LIBCPP26_ATOMIC_REDUCTIONS

Atomic Reduction Operations.

SD-6 equivalent: __cpp_lib_atomic_reductions >= 202506L. This token will have a value of 0 if the proposal described here is not supported.

  • 202506L P3111R8 Atomic Reduction Operations
See also
<atomic> freestanding

◆ LBAL_LIBCPP26_ATOMIC_REF_ADDRESS

#define LBAL_LIBCPP26_ATOMIC_REF_ADDRESS

Expose std::atomic_ref’s object address.

SD-6 equivalent: __cpp_lib_atomic_ref >= 202411L. Note that __cpp_lib_atomic_ref 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.

  • 202411L P2835R7 Expose std::atomic_ref’s object address
  • 202603L P2835R7 Expose std::atomic_ref’s object address
See also
<atomic> freestanding

◆ LBAL_LIBCPP26_ATOMIC_REF_SAFER_ADDRESS

#define LBAL_LIBCPP26_ATOMIC_REF_SAFER_ADDRESS

Safer atomic_ref::address.

SD-6 equivalent: __cpp_lib_atomic_ref >= 202603L. Note that __cpp_lib_atomic_ref 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.

  • 202603L P3936R1 Safer atomic_ref::address
See also
<atomic> freestanding

◆ LBAL_LIBCPP26_BIND_FRONT_NTTP_CALLABLES

#define LBAL_LIBCPP26_BIND_FRONT_NTTP_CALLABLES

Bind front and back to NTTP callables.

SD-6 equivalent: __cpp_lib_bind_front >= 202306L. Note that __cpp_lib_bind_front 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.

  • 202306L P2714R1 Bind front and back to NTTP callables
See also
freestanding <functional>

◆ LBAL_LIBCPP26_BITSET

#define LBAL_LIBCPP26_BITSET

Interfacing bitset with string_view.

SD-6 equivalent: __cpp_lib_bitset >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P2697R1 Interfacing bitset with string_view
See also
<bitset>

◆ LBAL_LIBCPP26_CHRONO_HASHING

#define LBAL_LIBCPP26_CHRONO_HASHING

Add hashing support for std::chrono value classes.

SD-6 equivalent: __cpp_lib_chrono >= 202306L. Note that __cpp_lib_chrono 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.

  • 202306L P2592R3 Hashing support for std::chrono value classes
See also
<chrono>

◆ LBAL_LIBCPP26_CONSTANT_WRAPPER

#define LBAL_LIBCPP26_CONSTANT_WRAPPER

std::constexpr_wrapper

SD-6 equivalent: __cpp_lib_constant_wrapper >= 202506L. Note that __cpp_lib_constant_wrapper 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.

  • 202506L P2781R9 std::constexpr_wrapper
See also
freestanding <type_traits> <utility>

◆ LBAL_LIBCPP26_CONSTANT_WRAPPER_UNWRAP_ON_CALL

#define LBAL_LIBCPP26_CONSTANT_WRAPPER_UNWRAP_ON_CALL

constant_wrapper should unwrap on call and subscript

SD-6 equivalent: __cpp_lib_constant_wrapper >= 202603L. Note that __cpp_lib_constant_wrapper 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.

  • 202603L P3978R3 constant_wrapper should unwrap on call and subscript
See also
freestanding <type_traits> <utility>

◆ LBAL_LIBCPP26_CONSTEXPR_ALGORITHMS_STABLE_SORT

#define LBAL_LIBCPP26_CONSTEXPR_ALGORITHMS_STABLE_SORT

Add constexpr to std::swap and related functions.

SD-6 equivalent: __cpp_lib_constexpr_algorithms >= 202306L. Note that __cpp_lib_constexpr_algorithms 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.

See also
<algorithm> <utility>

◆ LBAL_LIBCPP26_CONSTEXPR_ATOMIC

#define LBAL_LIBCPP26_CONSTEXPR_ATOMIC

constexpr atomic and atomic_ref

SD-6 equivalent: __cpp_lib_constexpr_atomic >= 202411L. This token will have a value of 0 if the proposal described here is not supported.

  • 202411L P3309R3 constexpr atomic and atomic_ref
See also
<atomic>

◆ LBAL_LIBCPP26_CONSTEXPR_COMPLEX

#define LBAL_LIBCPP26_CONSTEXPR_COMPLEX

Add more constexpr support to <cmath> and <complex>.

SD-6 equivalent: __cpp_lib_constexpr_complex >= 202306L. Note that __cpp_lib_constexpr_complex 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.

  • 202306L P1383R2 More constexpr for cmath and complex
See also
<complex>

◆ LBAL_LIBCPP26_CONSTEXPR_DEQUE

#define LBAL_LIBCPP26_CONSTEXPR_DEQUE

constexpr containers and adapters

SD-6 equivalent: __cpp_lib_constexpr_deque >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3372R3 constexpr containers and adapters
See also
<deque>

◆ LBAL_LIBCPP26_CONSTEXPR_EXCEPTIONS

#define LBAL_LIBCPP26_CONSTEXPR_EXCEPTIONS

constexpr exception types

SD-6 equivalent: __cpp_lib_constexpr_exceptions >= 202502L. Note that __cpp_lib_constexpr_exceptions 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.

  • 202502L P3378R2 constexpr exception types
See also
<exception> <expected> <format> <optional> <stdexcept> <variant>

◆ LBAL_LIBCPP26_CONSTEXPR_FLAT_MAP

#define LBAL_LIBCPP26_CONSTEXPR_FLAT_MAP

constexpr containers and adapters

SD-6 equivalent: __cpp_lib_constexpr_flat_map >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3372R3 constexpr containers and adapters
See also
<flat_map>

◆ LBAL_LIBCPP26_CONSTEXPR_FLAT_SET

#define LBAL_LIBCPP26_CONSTEXPR_FLAT_SET

constexpr containers and adapters

SD-6 equivalent: __cpp_lib_constexpr_flat_set >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3372R3 constexpr containers and adapters
See also
<flat_set>

◆ LBAL_LIBCPP26_CONSTEXPR_FORMAT

#define LBAL_LIBCPP26_CONSTEXPR_FORMAT

constexpr std::format

SD-6 equivalent: __cpp_lib_constexpr_format >= 202511L. This token will have a value of 0 if the proposal described here is not supported.

  • 202511L P3391R2 constexpr std::format
See also
<format>

◆ LBAL_LIBCPP26_CONSTEXPR_FORWARD_LIST

#define LBAL_LIBCPP26_CONSTEXPR_FORWARD_LIST

constexpr containers and adapters

SD-6 equivalent: __cpp_lib_constexpr_forward_list >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3372R3 constexpr containers and adapters
See also
<forward_list>

◆ LBAL_LIBCPP26_CONSTEXPR_LIST

#define LBAL_LIBCPP26_CONSTEXPR_LIST

constexpr containers and adapters

SD-6 equivalent: __cpp_lib_constexpr_list >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3372R3 constexpr containers and adapters
See also
<list>

◆ LBAL_LIBCPP26_CONSTEXPR_MAP

#define LBAL_LIBCPP26_CONSTEXPR_MAP

constexpr containers and adapters

SD-6 equivalent: __cpp_lib_constexpr_map >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3372R3 constexpr containers and adapters
See also
<map>

◆ LBAL_LIBCPP26_CONSTEXPR_MEMORY_SHARED_PTR

#define LBAL_LIBCPP26_CONSTEXPR_MEMORY_SHARED_PTR

Make std::shared_ptr and friends constexpr.

SD-6 equivalent: __cpp_lib_constexpr_memory >= 202506L. Note that __cpp_lib_constexpr_memory 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.

  • 202506L P3037R6 constexpr std::shared_ptr and friends
See also
freestanding <memory>

◆ LBAL_LIBCPP26_CONSTEXPR_QUEUE

#define LBAL_LIBCPP26_CONSTEXPR_QUEUE

constexpr containers and adapters

SD-6 equivalent: __cpp_lib_constexpr_queue >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3372R3 constexpr containers and adapters
See also
<queue>

◆ LBAL_LIBCPP26_CONSTEXPR_SET

#define LBAL_LIBCPP26_CONSTEXPR_SET

constexpr containers and adapters

SD-6 equivalent: __cpp_lib_constexpr_set >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3372R3 constexpr containers and adapters
See also
<set>

◆ LBAL_LIBCPP26_CONSTEXPR_STACK

#define LBAL_LIBCPP26_CONSTEXPR_STACK

constexpr containers and adapters

SD-6 equivalent: __cpp_lib_constexpr_stack >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3372R3 constexpr containers and adapters
See also
<stack>

◆ LBAL_LIBCPP26_CONSTEXPR_UNORDERED_MAP

#define LBAL_LIBCPP26_CONSTEXPR_UNORDERED_MAP

constexpr containers and adapters

SD-6 equivalent: __cpp_lib_constexpr_unordered_map >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3372R3 constexpr containers and adapters
See also
<unordered_map>

◆ LBAL_LIBCPP26_CONSTEXPR_UNORDERED_SET

#define LBAL_LIBCPP26_CONSTEXPR_UNORDERED_SET

constexpr containers and adapters

SD-6 equivalent: __cpp_lib_constexpr_unordered_set >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3372R3 constexpr containers and adapters
See also
<unordered_set>

◆ LBAL_LIBCPP26_CONSTRAINED_EQUALITY

#define LBAL_LIBCPP26_CONSTRAINED_EQUALITY

Comparisons for reference_wrapper.

SD-6 equivalent: __cpp_lib_constrained_equality >= 202403L. Note that __cpp_lib_constrained_equality 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.

  • 202403L P2944R3 Comparisons for reference_wrapper
  • 202411L P3379R0 Constrain std::expected equality operators
See also
<expected> freestanding <optional> <tuple> <utility> <variant>

◆ LBAL_LIBCPP26_CONSTRAINED_EQUALITY_EXPECTED

#define LBAL_LIBCPP26_CONSTRAINED_EQUALITY_EXPECTED

Constrain std::expected equality operators.

SD-6 equivalent: __cpp_lib_constrained_equality >= 202411L. Note that __cpp_lib_constrained_equality 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.

See also
<expected> freestanding <optional> <tuple> <utility> <variant>

◆ LBAL_LIBCPP26_COPYABLE_FUNCTION

#define LBAL_LIBCPP26_COPYABLE_FUNCTION

copyable_function

SD-6 equivalent: __cpp_lib_copyable_function >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P2548R6 copyable_function
See also
<functional>

◆ LBAL_LIBCPP26_COUNTING_SCOPE

#define LBAL_LIBCPP26_COUNTING_SCOPE

async_scope — Creating scopes for non-sequential concurrency

SD-6 equivalent: __cpp_lib_counting_scope >= 202506L. This token will have a value of 0 if the proposal described here is not supported.

  • 202506L P3149R11 async_scope — Creating scopes for non-sequential concurrency
See also
<execution>

◆ LBAL_LIBCPP26_DEBUGGING

#define LBAL_LIBCPP26_DEBUGGING

Debugging Support.

SD-6 equivalent: __cpp_lib_debugging >= 202311L. Note that __cpp_lib_debugging 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.

  • 202311L P2546R5 Debugging Support
See also
<debugging> freestanding

◆ LBAL_LIBCPP26_DEBUGGING_UTILITIES

#define LBAL_LIBCPP26_DEBUGGING_UTILITIES

is_debugger_present is_replaceable

SD-6 equivalent: __cpp_lib_debugging >= 202403L. Note that __cpp_lib_debugging 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.

  • 202403L P2810R4 is_debugger_present is_replaceable
See also
<debugging> freestanding

◆ LBAL_LIBCPP26_DEFAULT_TEMPLATE_TYPE_FOR_ALGORITHM_VALUES

#define LBAL_LIBCPP26_DEFAULT_TEMPLATE_TYPE_FOR_ALGORITHM_VALUES

Enabling list-initialization for algorithms.

SD-6 equivalent: __cpp_lib_default_template_type_for_algorithm_values >= 202403L. This token will have a value of 0 if the proposal described here is not supported.

  • 202403L P2248R8 Enabling list-initialization for algorithms
See also
<algorithm> <deque> <forward_list> <list> <ranges> <string> <vector>

◆ LBAL_LIBCPP26_DEFINE_STATIC

#define LBAL_LIBCPP26_DEFINE_STATIC

define_static_{string,object,array}

SD-6 equivalent: __cpp_lib_define_static >= 202506L. This token will have a value of 0 if the proposal described here is not supported.

  • 202506L P3491R3 define_static_{string,object,array}
See also
freestanding <meta>

◆ LBAL_LIBCPP26_EXCEPTION_PTR_CAST

#define LBAL_LIBCPP26_EXCEPTION_PTR_CAST

Observing exceptions stored in exception_ptr.

SD-6 equivalent: __cpp_lib_exception_ptr_cast >= 202506L. Note that __cpp_lib_exception_ptr_cast 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.

  • 202506L P2927R3 Observing exceptions stored in exception_ptr
See also
<exception>

◆ LBAL_LIBCPP26_EXCEPTION_PTR_CAST_BETTER_RETURN_TYPES

#define LBAL_LIBCPP26_EXCEPTION_PTR_CAST_BETTER_RETURN_TYPES

Better return types in std::inplace_vector and std::exception_ptr_cast.

SD-6 equivalent: __cpp_lib_exception_ptr_cast >= 202603L. Note that __cpp_lib_exception_ptr_cast 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.

  • 202603L P3981R2 Better return types in std::inplace_vector and std::exception_ptr_cast
See also
<exception>

◆ LBAL_LIBCPP26_EXCEPTION_PTR_CAST_CONSTEXPR

#define LBAL_LIBCPP26_EXCEPTION_PTR_CAST_CONSTEXPR

Inspecting exception_ptr works should be constexpr.

SD-6 equivalent: __cpp_lib_exception_ptr_cast >= 202506L. Note that __cpp_lib_exception_ptr_cast 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.

  • 202506L P3748R0 Inspecting exception_ptr works should be constexpr.
See also
<exception>

◆ LBAL_LIBCPP26_FLAT_MAP_FIXES

#define LBAL_LIBCPP26_FLAT_MAP_FIXES

flat_meow Fixes

SD-6 equivalent: __cpp_lib_flat_map >= 202511L. Note that __cpp_lib_flat_map 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.

See also
<flat_map>

◆ LBAL_LIBCPP26_FLAT_SET_FIXES

#define LBAL_LIBCPP26_FLAT_SET_FIXES

flat_meow Fixes

SD-6 equivalent: __cpp_lib_flat_set >= 202511L. Note that __cpp_lib_flat_set 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.

See also
<flat_set>

◆ LBAL_LIBCPP26_FORMAT_MEMBER_VISIT

#define LBAL_LIBCPP26_FORMAT_MEMBER_VISIT

Member visit.

SD-6 equivalent: __cpp_lib_format >= 202306L. Note that __cpp_lib_format 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.

See also
<format>

◆ LBAL_LIBCPP26_FORMAT_PATH

#define LBAL_LIBCPP26_FORMAT_PATH

Formatting of std::filesystem::path.

SD-6 equivalent: __cpp_lib_format_path >= 202403L. Note that __cpp_lib_format_path 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.

  • 202403L P2845R8 Formatting of std::filesystem::path
See also
<filesystem>

◆ LBAL_LIBCPP26_FORMAT_PATH_FIXES

#define LBAL_LIBCPP26_FORMAT_PATH_FIXES

Prevent path presentation problems.

SD-6 equivalent: __cpp_lib_format_path >= 202506L. Note that __cpp_lib_format_path 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.

  • 202506L P2319R5 Prevent path presentation problems
See also
<filesystem>

◆ LBAL_LIBCPP26_FORMAT_POINTERS

#define LBAL_LIBCPP26_FORMAT_POINTERS

Format pointers.

SD-6 equivalent: __cpp_lib_format >= 202304L. Note that __cpp_lib_format 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.

  • 202304L P2510R3 Formatting pointers
See also
<format>

◆ LBAL_LIBCPP26_FORMAT_RUNTIME

#define LBAL_LIBCPP26_FORMAT_RUNTIME

Add runtime format strings.

SD-6 equivalent: __cpp_lib_format >= 202311L. Note that __cpp_lib_format 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.

  • 202311L P2918R2 Runtime format strings II
  • 202603L P2918R2 Runtime format strings II
See also
<format>

◆ LBAL_LIBCPP26_FORMAT_TYPE_CHECK

#define LBAL_LIBCPP26_FORMAT_TYPE_CHECK

Type check format args.

SD-6 equivalent: __cpp_lib_format >= 202305L. Note that __cpp_lib_format 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.

  • 202305L P2757R3 Type checking format args
See also
<format>

◆ LBAL_LIBCPP26_FORMAT_UCHAR

#define LBAL_LIBCPP26_FORMAT_UCHAR

Fix formatting of code units as integers (Dude, where’s my char?).

SD-6 equivalent: __cpp_lib_format_uchar >= 202311L. This token will have a value of 0 if the proposal described here is not supported.

  • 202311L P2909R4 Fix formatting of code units as integers (Dude, where’s my char?)
See also
<format>

◆ LBAL_LIBCPP26_FREESTANDING_ALGORITHM

#define LBAL_LIBCPP26_FREESTANDING_ALGORITHM

Freestanding Library: Partial Classes.

SD-6 equivalent: __cpp_lib_freestanding_algorithm >= 202311L. Note that __cpp_lib_freestanding_algorithm 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.

  • 202311L P2407R5 Freestanding Library: Partial Classes
See also
<algorithm> freestanding

◆ LBAL_LIBCPP26_FREESTANDING_ALGORITHM_MORE

#define LBAL_LIBCPP26_FREESTANDING_ALGORITHM_MORE

Freestanding Library: algorithm, numeric, and random.

SD-6 equivalent: __cpp_lib_freestanding_algorithm >= 202502L. Note that __cpp_lib_freestanding_algorithm 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.

  • 202502L P2976R1 Freestanding Library: algorithm, numeric, and random
See also
<algorithm> freestanding

◆ LBAL_LIBCPP26_FREESTANDING_ARRAY

#define LBAL_LIBCPP26_FREESTANDING_ARRAY

Freestanding Library: Partial Classes.

SD-6 equivalent: __cpp_lib_freestanding_array >= 202311L. This token will have a value of 0 if the proposal described here is not supported.

  • 202311L P2407R5 Freestanding Library: Partial Classes
See also
<array> freestanding

◆ LBAL_LIBCPP26_FREESTANDING_CHAR_TRAITS

#define LBAL_LIBCPP26_FREESTANDING_CHAR_TRAITS

Freestanding Library: Character primitives and the C library.

SD-6 equivalent: __cpp_lib_freestanding_char_traits >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P2338R4 Freestanding Library: Character primitives and the C library
See also
freestanding <string>

◆ LBAL_LIBCPP26_FREESTANDING_CHARCONV

#define LBAL_LIBCPP26_FREESTANDING_CHARCONV

Freestanding Library: Character primitives and the C library.

SD-6 equivalent: __cpp_lib_freestanding_charconv >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P2338R4 Freestanding Library: Character primitives and the C library
See also
<charconv> freestanding

◆ LBAL_LIBCPP26_FREESTANDING_CSTDLIB

#define LBAL_LIBCPP26_FREESTANDING_CSTDLIB

Freestanding Library: Character primitives and the C library.

SD-6 equivalent: __cpp_lib_freestanding_cstdlib >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P2338R4 Freestanding Library: Character primitives and the C library
See also
<cmath> <cstdlib> freestanding

◆ LBAL_LIBCPP26_FREESTANDING_CSTRING

#define LBAL_LIBCPP26_FREESTANDING_CSTRING

Freestanding Library: Character primitives and the C library.

SD-6 equivalent: __cpp_lib_freestanding_cstring >= 202306L. Note that __cpp_lib_freestanding_cstring 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.

  • 202306L P2338R4 Freestanding Library: Character primitives and the C library
See also
<cstring> freestanding

◆ LBAL_LIBCPP26_FREESTANDING_CSTRING_REMOVE_STRTOK

#define LBAL_LIBCPP26_FREESTANDING_CSTRING_REMOVE_STRTOK

Freestanding: Remove strtok.

SD-6 equivalent: __cpp_lib_freestanding_cstring >= 202311L. Note that __cpp_lib_freestanding_cstring 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.

  • 202311L P2937R0 Freestanding: Remove strtok
See also
<cstring> freestanding

◆ LBAL_LIBCPP26_FREESTANDING_CWCHAR

#define LBAL_LIBCPP26_FREESTANDING_CWCHAR

Freestanding Library: Character primitives and the C library.

SD-6 equivalent: __cpp_lib_freestanding_cwchar >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P2338R4 Freestanding Library: Character primitives and the C library
See also
<cwchar> freestanding

◆ LBAL_LIBCPP26_FREESTANDING_ERRC

#define LBAL_LIBCPP26_FREESTANDING_ERRC

Freestanding Library: Character primitives and the C library.

SD-6 equivalent: __cpp_lib_freestanding_errc >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P2338R4 Freestanding Library: Character primitives and the C library
See also
<cerrno> freestanding <system_error>

◆ LBAL_LIBCPP26_FREESTANDING_EXECUTION

#define LBAL_LIBCPP26_FREESTANDING_EXECUTION

Freestanding Library: algorithm, numeric, and random.

SD-6 equivalent: __cpp_lib_freestanding_execution >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P2976R1 Freestanding Library: algorithm, numeric, and random
See also
<execution> freestanding

◆ LBAL_LIBCPP26_FREESTANDING_EXPECTED

#define LBAL_LIBCPP26_FREESTANDING_EXPECTED

Freestanding Library: inout expected span.

SD-6 equivalent: __cpp_lib_freestanding_expected >= 202311L. This token will have a value of 0 if the proposal described here is not supported.

  • 202311L P2833R2 Freestanding Library: inout expected span
See also
<expected> freestanding

◆ LBAL_LIBCPP26_FREESTANDING_FEATURE_TEST_MACROS

#define LBAL_LIBCPP26_FREESTANDING_FEATURE_TEST_MACROS

Freestanding Feature-Test Macros and Implementation-Defined Extensions.

SD-6 equivalent: __cpp_lib_freestanding_feature_test_macros >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P2198R7 Freestanding Feature-Test Macros and Implementation-Defined Extensions
See also
freestanding

◆ LBAL_LIBCPP26_FREESTANDING_FUNCTIONAL

#define LBAL_LIBCPP26_FREESTANDING_FUNCTIONAL

Freestanding Feature-Test Macros and Implementation-Defined Extensions.

SD-6 equivalent: __cpp_lib_freestanding_functional >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P2198R7 Freestanding Feature-Test Macros and Implementation-Defined Extensions
See also
freestanding <functional>

◆ LBAL_LIBCPP26_FREESTANDING_ITERATOR

#define LBAL_LIBCPP26_FREESTANDING_ITERATOR

Freestanding Feature-Test Macros and Implementation-Defined Extensions.

SD-6 equivalent: __cpp_lib_freestanding_iterator >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P2198R7 Freestanding Feature-Test Macros and Implementation-Defined Extensions
See also
freestanding <iterator>

◆ LBAL_LIBCPP26_FREESTANDING_MDSPAN

#define LBAL_LIBCPP26_FREESTANDING_MDSPAN

Freestanding Library: inout expected span.

SD-6 equivalent: __cpp_lib_freestanding_mdspan >= 202311L. This token will have a value of 0 if the proposal described here is not supported.

  • 202311L P2833R2 Freestanding Library: inout expected span
See also
freestanding <mdspan>

◆ LBAL_LIBCPP26_FREESTANDING_MEMORY

#define LBAL_LIBCPP26_FREESTANDING_MEMORY

Freestanding Feature-Test Macros and Implementation-Defined Extensions.

SD-6 equivalent: __cpp_lib_freestanding_memory >= 202306L. Note that __cpp_lib_freestanding_memory 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.

  • 202306L P2198R7 Freestanding Feature-Test Macros and Implementation-Defined Extensions
See also
freestanding <memory>

◆ LBAL_LIBCPP26_FREESTANDING_MEMORY_MORE

#define LBAL_LIBCPP26_FREESTANDING_MEMORY_MORE

Freestanding Library: algorithm, numeric, and random.

SD-6 equivalent: __cpp_lib_freestanding_memory >= 202502L. Note that __cpp_lib_freestanding_memory 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.

  • 202502L P2976R1 Freestanding Library: algorithm, numeric, and random
See also
freestanding <memory>

◆ LBAL_LIBCPP26_FREESTANDING_NUMERIC

#define LBAL_LIBCPP26_FREESTANDING_NUMERIC

Freestanding Library: algorithm, numeric, and random.

SD-6 equivalent: __cpp_lib_freestanding_numeric >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P2976R1 Freestanding Library: algorithm, numeric, and random
See also
freestanding <numeric>

◆ LBAL_LIBCPP26_FREESTANDING_OPERATOR_NEW

#define LBAL_LIBCPP26_FREESTANDING_OPERATOR_NEW

Freestanding Feature-Test Macros and Implementation-Defined Extensions.

SD-6 equivalent: __cpp_lib_freestanding_operator_new >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P2198R7 Freestanding Feature-Test Macros and Implementation-Defined Extensions
See also
freestanding <new>

◆ LBAL_LIBCPP26_FREESTANDING_OPTIONAL

#define LBAL_LIBCPP26_FREESTANDING_OPTIONAL

Freestanding Library: Partial Classes.

SD-6 equivalent: __cpp_lib_freestanding_optional >= 202311L. Note that __cpp_lib_freestanding_optional 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.

  • 202311L P2407R5 Freestanding Library: Partial Classes
See also
freestanding <optional>

◆ LBAL_LIBCPP26_FREESTANDING_RANDOM

#define LBAL_LIBCPP26_FREESTANDING_RANDOM

Freestanding Library: algorithm, numeric, and random.

SD-6 equivalent: __cpp_lib_freestanding_random >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P2976R1 Freestanding Library: algorithm, numeric, and random
See also
freestanding <random>

◆ LBAL_LIBCPP26_FREESTANDING_RANGES

#define LBAL_LIBCPP26_FREESTANDING_RANGES

Freestanding Feature-Test Macros and Implementation-Defined Extensions.

SD-6 equivalent: __cpp_lib_freestanding_ranges >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P2198R7 Freestanding Feature-Test Macros and Implementation-Defined Extensions
See also
freestanding <ranges>

◆ LBAL_LIBCPP26_FREESTANDING_RATIO

#define LBAL_LIBCPP26_FREESTANDING_RATIO

Freestanding Feature-Test Macros and Implementation-Defined Extensions.

SD-6 equivalent: __cpp_lib_freestanding_ratio >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P2198R7 Freestanding Feature-Test Macros and Implementation-Defined Extensions
See also
freestanding <ratio>

◆ LBAL_LIBCPP26_FREESTANDING_STRING_VIEW

#define LBAL_LIBCPP26_FREESTANDING_STRING_VIEW

Freestanding Library: Partial Classes.

SD-6 equivalent: __cpp_lib_freestanding_string_view >= 202311L. This token will have a value of 0 if the proposal described here is not supported.

  • 202311L P2407R5 Freestanding Library: Partial Classes
See also
freestanding <string_view>

◆ LBAL_LIBCPP26_FREESTANDING_TUPLE

#define LBAL_LIBCPP26_FREESTANDING_TUPLE

Freestanding Feature-Test Macros and Implementation-Defined Extensions.

SD-6 equivalent: __cpp_lib_freestanding_tuple >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P2198R7 Freestanding Feature-Test Macros and Implementation-Defined Extensions
See also
freestanding <tuple>

◆ LBAL_LIBCPP26_FREESTANDING_UTILITY

#define LBAL_LIBCPP26_FREESTANDING_UTILITY

Freestanding Feature-Test Macros and Implementation-Defined Extensions.

SD-6 equivalent: __cpp_lib_freestanding_utility >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P2198R7 Freestanding Feature-Test Macros and Implementation-Defined Extensions
See also
freestanding <utility>

◆ LBAL_LIBCPP26_FREESTANDING_VARIANT

#define LBAL_LIBCPP26_FREESTANDING_VARIANT

Freestanding Library: Partial Classes.

SD-6 equivalent: __cpp_lib_freestanding_variant >= 202311L. This token will have a value of 0 if the proposal described here is not supported.

  • 202311L P2407R5 Freestanding Library: Partial Classes
See also
freestanding <variant>

◆ LBAL_LIBCPP26_FSTREAM_NATIVE_HANDLE

#define LBAL_LIBCPP26_FSTREAM_NATIVE_HANDLE

Native handles and file streams.

SD-6 equivalent: __cpp_lib_fstream_native_handle >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P1759R6 Native handles and file streams
See also
<fstream>

◆ LBAL_LIBCPP26_FUNCTION_REF

#define LBAL_LIBCPP26_FUNCTION_REF

function_ref: a non-owning reference to a Callable

SD-6 equivalent: __cpp_lib_function_ref >= 202306L. Note that __cpp_lib_function_ref 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.

  • 202306L P0792R14 function_ref: a non-owning reference to a Callable
See also
freestanding <functional>

◆ LBAL_LIBCPP26_FUNCTION_REF_LESS_DOUBLE_INDIRECTION

#define LBAL_LIBCPP26_FUNCTION_REF_LESS_DOUBLE_INDIRECTION

Less double indirection in function_ref.

SD-6 equivalent: __cpp_lib_function_ref >= 202603L. Note that __cpp_lib_function_ref 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.

  • 202603L P3961R1 Less double indirection in function_ref
Remarks
The C++26 FDIS erroneously gives __cpp_lib_function_ref a value of 202604L for this, but it’s a C++26 feature.
See also
freestanding <functional>

◆ LBAL_LIBCPP26_FUNCTION_REF_RENAME_NONTYPE

#define LBAL_LIBCPP26_FUNCTION_REF_RENAME_NONTYPE

Rename std::nontype, and make it broadly useful.

SD-6 equivalent: __cpp_lib_function_ref >= 202511L. Note that __cpp_lib_function_ref 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.

  • 202511L P3774R1 Rename std::nontype, and make it broadly useful
See also
freestanding <functional>

◆ LBAL_LIBCPP26_GENERATE_RANDOM

#define LBAL_LIBCPP26_GENERATE_RANDOM

Vector API for random number generation.

SD-6 equivalent: __cpp_lib_generate_random >= 202403L. This token will have a value of 0 if the proposal described here is not supported.

  • 202403L P1068R11 Vector API for random number generation
See also
<random>

◆ LBAL_LIBCPP26_HARDENED_ARRAY

#define LBAL_LIBCPP26_HARDENED_ARRAY

Standard Library Hardening.

SD-6 equivalent: __cpp_lib_hardened_array >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3471R4 Standard Library Hardening
See also
<array>

◆ LBAL_LIBCPP26_HARDENED_BASIC_STACKTRACE

#define LBAL_LIBCPP26_HARDENED_BASIC_STACKTRACE

Minor additions to C++26 standard library hardening.

SD-6 equivalent: __cpp_lib_hardened_basic_stacktrace >= 202506L. This token will have a value of 0 if the proposal described here is not supported.

  • 202506L P3697R1 Minor additions to C++26 standard library hardening
See also
<stacktrace>

◆ LBAL_LIBCPP26_HARDENED_BASIC_STRING

#define LBAL_LIBCPP26_HARDENED_BASIC_STRING

Standard Library Hardening.

SD-6 equivalent: __cpp_lib_hardened_basic_string >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3471R4 Standard Library Hardening
See also
<string>

◆ LBAL_LIBCPP26_HARDENED_BASIC_STRING_VIEW

#define LBAL_LIBCPP26_HARDENED_BASIC_STRING_VIEW

Standard Library Hardening.

SD-6 equivalent: __cpp_lib_hardened_basic_string_view >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3471R4 Standard Library Hardening
See also
<string_view>

◆ LBAL_LIBCPP26_HARDENED_BITSET

#define LBAL_LIBCPP26_HARDENED_BITSET

Standard Library Hardening.

SD-6 equivalent: __cpp_lib_hardened_bitset >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3471R4 Standard Library Hardening
See also
<bitset>

◆ LBAL_LIBCPP26_HARDENED_COMMON_ITERATOR

#define LBAL_LIBCPP26_HARDENED_COMMON_ITERATOR

Minor additions to C++26 standard library hardening.

SD-6 equivalent: __cpp_lib_hardened_common_iterator >= 202506L. This token will have a value of 0 if the proposal described here is not supported.

  • 202506L P3697R1 Minor additions to C++26 standard library hardening
See also
<iterator>

◆ LBAL_LIBCPP26_HARDENED_COUNTED_ITERATOR

#define LBAL_LIBCPP26_HARDENED_COUNTED_ITERATOR

Minor additions to C++26 standard library hardening.

SD-6 equivalent: __cpp_lib_hardened_counted_iterator >= 202506L. This token will have a value of 0 if the proposal described here is not supported.

  • 202506L P3697R1 Minor additions to C++26 standard library hardening
See also
<iterator>

◆ LBAL_LIBCPP26_HARDENED_DEQUE

#define LBAL_LIBCPP26_HARDENED_DEQUE

Standard Library Hardening.

SD-6 equivalent: __cpp_lib_hardened_deque >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3471R4 Standard Library Hardening
See also
<deque>

◆ LBAL_LIBCPP26_HARDENED_EXPECTED

#define LBAL_LIBCPP26_HARDENED_EXPECTED

Standard Library Hardening.

SD-6 equivalent: __cpp_lib_hardened_expected >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3471R4 Standard Library Hardening
See also
<expected>

◆ LBAL_LIBCPP26_HARDENED_FORWARD_LIST

#define LBAL_LIBCPP26_HARDENED_FORWARD_LIST

Standard Library Hardening.

SD-6 equivalent: __cpp_lib_hardened_forward_list >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3471R4 Standard Library Hardening
See also
<forward_list>

◆ LBAL_LIBCPP26_HARDENED_INPLACE_VECTOR

#define LBAL_LIBCPP26_HARDENED_INPLACE_VECTOR

Standard Library Hardening.

SD-6 equivalent: __cpp_lib_hardened_inplace_vector >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3471R4 Standard Library Hardening
See also
<inplace_vector>

◆ LBAL_LIBCPP26_HARDENED_LIST

#define LBAL_LIBCPP26_HARDENED_LIST

Standard Library Hardening.

SD-6 equivalent: __cpp_lib_hardened_list >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3471R4 Standard Library Hardening
See also
<list>

◆ LBAL_LIBCPP26_HARDENED_MDSPAN

#define LBAL_LIBCPP26_HARDENED_MDSPAN

Standard Library Hardening.

SD-6 equivalent: __cpp_lib_hardened_mdspan >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3471R4 Standard Library Hardening
See also
<mdspan>

◆ LBAL_LIBCPP26_HARDENED_OPTIONAL

#define LBAL_LIBCPP26_HARDENED_OPTIONAL

Standard Library Hardening.

SD-6 equivalent: __cpp_lib_hardened_optional >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3471R4 Standard Library Hardening
See also
<optional>

◆ LBAL_LIBCPP26_HARDENED_SHARED_PTR_ARRAY

#define LBAL_LIBCPP26_HARDENED_SHARED_PTR_ARRAY

Minor additions to C++26 standard library hardening.

SD-6 equivalent: __cpp_lib_hardened_shared_ptr_array >= 202506L. This token will have a value of 0 if the proposal described here is not supported.

  • 202506L P3697R1 Minor additions to C++26 standard library hardening
See also
<memory>

◆ LBAL_LIBCPP26_HARDENED_SPAN

#define LBAL_LIBCPP26_HARDENED_SPAN

Standard Library Hardening.

SD-6 equivalent: __cpp_lib_hardened_span >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3471R4 Standard Library Hardening
See also
<span>

◆ LBAL_LIBCPP26_HARDENED_VALARRAY

#define LBAL_LIBCPP26_HARDENED_VALARRAY

Standard Library Hardening.

SD-6 equivalent: __cpp_lib_hardened_valarray >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3471R4 Standard Library Hardening
See also
<valarray>

◆ LBAL_LIBCPP26_HARDENED_VECTOR

#define LBAL_LIBCPP26_HARDENED_VECTOR

Standard Library Hardening.

SD-6 equivalent: __cpp_lib_hardened_vector >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3471R4 Standard Library Hardening
See also
<vector>

◆ LBAL_LIBCPP26_HARDENED_VIEW_INTERFACE

#define LBAL_LIBCPP26_HARDENED_VIEW_INTERFACE

Minor additions to C++26 standard library hardening.

SD-6 equivalent: __cpp_lib_hardened_view_interface >= 202506L. This token will have a value of 0 if the proposal described here is not supported.

  • 202506L P3697R1 Minor additions to C++26 standard library hardening
See also
<ranges>

◆ LBAL_LIBCPP26_HAZARD_POINTER

#define LBAL_LIBCPP26_HAZARD_POINTER

Hazard Pointers for C++26.

SD-6 equivalent: __cpp_lib_hazard_pointer >= 202306L. Note that __cpp_lib_hazard_pointer 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.

  • 202306L P2530R3 Hazard Pointers for C++26
See also
<hazard_pointer>

◆ LBAL_LIBCPP26_HIVE

#define LBAL_LIBCPP26_HIVE

Introduction of std::hive to the standard library.

SD-6 equivalent: __cpp_lib_hive >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P0447R28 Introduction of std::hive to the standard library
See also
<hive>

◆ LBAL_LIBCPP26_INDIRECT

#define LBAL_LIBCPP26_INDIRECT

Vocabulary Types for Composite Class Design.

SD-6 equivalent: __cpp_lib_indirect >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3019R11 Vocabulary Types for Composite Class Design
See also
<memory>

◆ LBAL_LIBCPP26_INITIALIZER_LIST

#define LBAL_LIBCPP26_INITIALIZER_LIST

Resolve inconsistencies in begin/end for valarray and braced initializer lists.

SD-6 equivalent: __cpp_lib_initializer_list >= 202511L. This token will have a value of 0 if the proposal described here is not supported.

  • 202511L P3016R6 Resolve inconsistencies in begin/end for valarray and braced initializer lists
See also
freestanding <initializer_list>

◆ LBAL_LIBCPP26_INPLACE_VECTOR

#define LBAL_LIBCPP26_INPLACE_VECTOR

inplace_vector

SD-6 equivalent: __cpp_lib_inplace_vector >= 202406L. Note that __cpp_lib_inplace_vector 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.

See also
<inplace_vector>

◆ LBAL_LIBCPP26_INPLACE_VECTOR_BETTER_RETURN_TYPES

#define LBAL_LIBCPP26_INPLACE_VECTOR_BETTER_RETURN_TYPES

Better return types in std::inplace_vector and std::exception_ptr_cast.

SD-6 equivalent: __cpp_lib_inplace_vector >= 202603L. Note that __cpp_lib_inplace_vector 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.

  • 202603L P3981R2 Better return types in std::inplace_vector and std::exception_ptr_cast
See also
<inplace_vector>

◆ LBAL_LIBCPP26_INPLACE_VECTOR_REMOVE_TRY_APPEND_RANGE

#define LBAL_LIBCPP26_INPLACE_VECTOR_REMOVE_TRY_APPEND_RANGE

Remove try_append_range from inplace_vector for now.

SD-6 equivalent: __cpp_lib_inplace_vector >= 202603L. Note that __cpp_lib_inplace_vector 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.

  • 202603L P4022R0 Remove try_append_range from inplace_vector for now
See also
<inplace_vector>

◆ LBAL_LIBCPP26_INTEGER_SEQUENCE_EXPANSION_STATEMENTS

#define LBAL_LIBCPP26_INTEGER_SEQUENCE_EXPANSION_STATEMENTS

Add library Support for Expansion Statements.

SD-6 equivalent: __cpp_lib_integer_sequence >= 202511L. Note that __cpp_lib_integer_sequence 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.

  • 202511L P1789R3 Library Support for Expansion Statements
See also
freestanding <utility>

◆ LBAL_LIBCPP26_IS_STRUCTURAL

#define LBAL_LIBCPP26_IS_STRUCTURAL

New reflection metafunction—

SD-6 equivalent: __cpp_lib_is_structural >= 202603L. This token will have a value of 0 if the proposal described here is not supported.

  • 202603L P3856R8 New reflection metafunction—
See also
freestanding <meta> <type_traits>

◆ LBAL_LIBCPP26_IS_VIRTUAL_BASE_OF

#define LBAL_LIBCPP26_IS_VIRTUAL_BASE_OF

A type trait for detecting virtual base classes.

SD-6 equivalent: __cpp_lib_is_virtual_base_of >= 202406L. This token will have a value of 0 if the proposal described here is not supported.

  • 202406L P2985R0 A type trait for detecting virtual base classes
See also
freestanding <type_traits>

◆ LBAL_LIBCPP26_IS_WITHIN_LIFETIME

#define LBAL_LIBCPP26_IS_WITHIN_LIFETIME

Checking if a union alternative is active.

SD-6 equivalent: __cpp_lib_is_within_lifetime >= 202306L. Note that __cpp_lib_is_within_lifetime 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.

  • 202306L P2641R4 Checking if a union alternative is active
See also
freestanding <type_traits>

◆ LBAL_LIBCPP26_IS_WITHIN_LIFETIME_EXTEND

#define LBAL_LIBCPP26_IS_WITHIN_LIFETIME_EXTEND

Extend std::is_within_lifetime.

SD-6 equivalent: __cpp_lib_is_within_lifetime >= 202603L. Note that __cpp_lib_is_within_lifetime 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.

  • 202603L P3450R1 Extend std::is_within_lifetime
See also
freestanding <type_traits>

◆ LBAL_LIBCPP26_LINALG

#define LBAL_LIBCPP26_LINALG

A free function linear algebra interface based on the BLAS.

SD-6 equivalent: __cpp_lib_linalg >= 202311L. Note that __cpp_lib_linalg 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.

  • 202311L P1673R13 A free function linear algebra interface based on the BLAS
See also
<linalg>

◆ LBAL_LIBCPP26_LINALG_BLAS_RANK

#define LBAL_LIBCPP26_LINALG_BLAS_RANK

Fix C++26 by making the rank-1, rank-2, rank-k, and rank-2k updates consistent with the BLAS.

SD-6 equivalent: __cpp_lib_linalg >= 202511L. Note that __cpp_lib_linalg 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.

  • 202511L P3371R5 Fix C++26 by making the rank- 1, rank-2, rank-k, and rank-2k updates consistent with the BLAS
See also
<linalg>

◆ LBAL_LIBCPP26_LINALG_FIX_TRANSPOSED

#define LBAL_LIBCPP26_LINALG_FIX_TRANSPOSED

Fix C++26 by adding transposed special cases for P2642 layouts.

SD-6 equivalent: __cpp_lib_linalg >= 202411L. Note that __cpp_lib_linalg 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.

  • 202411L P3222R0 Fix C++26 by adding transposed special cases for P2642 layouts
See also
<linalg>

◆ LBAL_LIBCPP26_LINALG_OPTIMIZE_CONJUGATED

#define LBAL_LIBCPP26_LINALG_OPTIMIZE_CONJUGATED

Fix C++26 by optimizing linalg::conjugated for noncomplex value types.

SD-6 equivalent: __cpp_lib_linalg >= 202411L. Note that __cpp_lib_linalg 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.

  • 202411L P3050R2 Fix C++26 by optimizing linalg::conjugated for noncomplex value types
See also
<linalg>

◆ LBAL_LIBCPP26_MDSPAN_DEXTENTS

#define LBAL_LIBCPP26_MDSPAN_DEXTENTS

dextents Index Type Parameter

SD-6 equivalent: __cpp_lib_mdspan >= 202406L. Note that __cpp_lib_mdspan 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.

  • 202406L P2389R2 dextents Index Type Parameter
See also
freestanding <mdspan>

◆ LBAL_LIBCPP26_NOT_FN_NTTP_CALLABLES

#define LBAL_LIBCPP26_NOT_FN_NTTP_CALLABLES

Bind not_fn to NTTP callables.

SD-6 equivalent: __cpp_lib_not_fn >= 202306L. Note that __cpp_lib_not_fn 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.

  • 202306L P2714R1 Bind front and back to NTTP callables
See also
freestanding <functional>

◆ LBAL_LIBCPP26_OBSERVABLE_CHECKPOINT

#define LBAL_LIBCPP26_OBSERVABLE_CHECKPOINT

Rename std::observable to std::observable_checkpoint, and add a feature-test macro.

SD-6 equivalent: __cpp_lib_observable_checkpoint >= 202506L. This token will have a value of 0 if the proposal described here is not supported.

  • 202506L P3641R0 Rename std::observable to std::observable_checkpoint, and add a feature-test macro
See also
freestanding <utility>

◆ LBAL_LIBCPP26_OPTIONAL_RANGE_SUPPORT

#define LBAL_LIBCPP26_OPTIONAL_RANGE_SUPPORT

Give std::optional Range Support.

SD-6 equivalent: __cpp_lib_optional_range_support >= 202406L. This token will have a value of 0 if the proposal described here is not supported.

  • 202406L P3168R2 Give std::optional Range Support
See also
freestanding <optional>

◆ LBAL_LIBCPP26_OPTIONAL_REFERENCE

#define LBAL_LIBCPP26_OPTIONAL_REFERENCE

std::optional<T&>

SD-6 equivalent: __cpp_lib_optional >= 202506L. Note that __cpp_lib_optional 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.

See also
<optional>

◆ LBAL_LIBCPP26_OUT_PTR_MORE

#define LBAL_LIBCPP26_OUT_PTR_MORE

Freestanding Library: inout expected span.

SD-6 equivalent: __cpp_lib_out_ptr >= 202311L. Note that __cpp_lib_out_ptr 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.

  • 202311L P2833R2 Freestanding Library: inout expected span
See also
freestanding <memory>

◆ LBAL_LIBCPP26_PARALLEL_ALGORITHM_RANGE

#define LBAL_LIBCPP26_PARALLEL_ALGORITHM_RANGE

Add C++ parallel range algorithms.

SD-6 equivalent: __cpp_lib_parallel_algorithm >= 202506L. Note that __cpp_lib_parallel_algorithm 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.

  • 202506L P3179R9 C++ parallel range algorithms
See also
<algorithm> <memory> <numeric>

◆ LBAL_LIBCPP26_PARALLEL_SCHEDULER

#define LBAL_LIBCPP26_PARALLEL_SCHEDULER

Parallel Scheduler.

SD-6 equivalent: __cpp_lib_parallel_scheduler >= 202506L. This token will have a value of 0 if the proposal described here is not supported.

See also
<execution>

◆ LBAL_LIBCPP26_PHILOX_ENGINE

#define LBAL_LIBCPP26_PHILOX_ENGINE

Philox as an extension of the C++ RNG engines.

SD-6 equivalent: __cpp_lib_philox_engine >= 202406L. This token will have a value of 0 if the proposal described here is not supported.

  • 202406L P2075R6 Philox as an extension of the C++ RNG engines
See also
<random>

◆ LBAL_LIBCPP26_POLYMORPHIC

#define LBAL_LIBCPP26_POLYMORPHIC

Vocabulary Types for Composite Class Design.

SD-6 equivalent: __cpp_lib_polymorphic >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P3019R11 Vocabulary Types for Composite Class Design
See also
<memory>

◆ LBAL_LIBCPP26_PRINT_EFFICIENT

#define LBAL_LIBCPP26_PRINT_EFFICIENT

Permit an efficient implementation of std::print.

SD-6 equivalent: __cpp_lib_print >= 202403L. Note that __cpp_lib_print 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.

  • 202403L P3107R5 Permit an efficient implementation of std::print
See also
<ostream> <print>

◆ LBAL_LIBCPP26_PRINT_MORE_EFFICIENT

#define LBAL_LIBCPP26_PRINT_MORE_EFFICIENT

std::print more types faster with less memory

SD-6 equivalent: __cpp_lib_print >= 202406L. Note that __cpp_lib_print 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.

  • 202406L P3235R3 std::print more types faster with less memory
See also
<ostream> <print>

◆ LBAL_LIBCPP26_RANGES_AS_CONST_FIX_CONVERTIBILITY

#define LBAL_LIBCPP26_RANGES_AS_CONST_FIX_CONVERTIBILITY

std::basic_const_iterator should follow its underlying type’s convertibility

SD-6 equivalent: __cpp_lib_ranges_as_const >= 202311L. Note that __cpp_lib_ranges_as_const 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.

  • 202311L P2836R1 std::basic_const_iterator should follow its underlying type’s convertibility
See also
freestanding <ranges>

◆ LBAL_LIBCPP26_RANGES_AS_INPUT

#define LBAL_LIBCPP26_RANGES_AS_INPUT

views::to_input

SD-6 equivalent: __cpp_lib_ranges_as_input >= 202502L. Note that __cpp_lib_ranges_as_input 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.

See also
freestanding <ranges>

◆ LBAL_LIBCPP26_RANGES_AS_INPUT_RENAME

#define LBAL_LIBCPP26_RANGES_AS_INPUT_RENAME

Rename the to_input view to as_input.

SD-6 equivalent: __cpp_lib_ranges_as_input >= 202603L. Note that __cpp_lib_ranges_as_input 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.

  • 202603L P3828R1 PDF Rename the to_input view to as_input
See also
freestanding <ranges>

◆ LBAL_LIBCPP26_RANGES_CACHE_LATEST

#define LBAL_LIBCPP26_RANGES_CACHE_LATEST

views::cache_latest

SD-6 equivalent: __cpp_lib_ranges_cache_latest >= 202411L. This token will have a value of 0 if the proposal described here is not supported.

  • 202411L P3138R5 views::cache_latest
See also
freestanding <ranges>

◆ LBAL_LIBCPP26_RANGES_CONCAT

#define LBAL_LIBCPP26_RANGES_CONCAT

views::concat

SD-6 equivalent: __cpp_lib_ranges_concat >= 202403L. This token will have a value of 0 if the proposal described here is not supported.

See also
freestanding <ranges>

◆ LBAL_LIBCPP26_RANGES_FILTER

#define LBAL_LIBCPP26_RANGES_FILTER

Filter View Extensions for Safer Use, Rev 3.

SD-6 equivalent: __cpp_lib_ranges_filter >= 202603L. This token will have a value of 0 if the proposal described here is not supported.

  • 202603L P3725R3 Filter View Extensions for Safer Use, Rev 3
See also
freestanding <ranges>

◆ LBAL_LIBCPP26_RANGES_INDICES

#define LBAL_LIBCPP26_RANGES_INDICES

Add std::views::indices(n).

SD-6 equivalent: __cpp_lib_ranges_indices >= 202506L. This token will have a value of 0 if the proposal described here is not supported.

  • 202506L P3060R3 Add std::views::indices(n)
See also
<ranges>

◆ LBAL_LIBCPP26_RANGES_REMOVE_COMMON_REF_REQ

#define LBAL_LIBCPP26_RANGES_REMOVE_COMMON_REF_REQ

Removing the common reference requirement from the indirectly invocable concepts.

SD-6 equivalent: __cpp_lib_ranges >= 202406L. Note that __cpp_lib_ranges 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.

  • 202406L P2997R1 Removing the common reference requirement from the indirectly invocable concepts
See also
<algorithm> <functional> <iterator> <memory> <ranges>

◆ LBAL_LIBCPP26_RANGES_RESERVE_HINT

#define LBAL_LIBCPP26_RANGES_RESERVE_HINT

reserve_hint: Eagerly reserving memory for not-quite-sized lazy ranges

SD-6 equivalent: __cpp_lib_ranges_reserve_hint >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P2846R6 reserve_hint: Eagerly reserving memory for not-quite-sized lazy ranges
See also
<ranges>

◆ LBAL_LIBCPP26_RATIO

#define LBAL_LIBCPP26_RATIO

Adding the new 2022 SI prefixes.

SD-6 equivalent: __cpp_lib_ratio >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P2734R0 Adding the new 2022 SI prefixes
See also
freestanding <ratio>

◆ LBAL_LIBCPP26_RAW_MEMORY_ALGORITHMS_CONSTEXPR

#define LBAL_LIBCPP26_RAW_MEMORY_ALGORITHMS_CONSTEXPR

Improve constexpr supprt for raw memory management.

SD-6 equivalent: __cpp_lib_raw_memory_algorithms >= 202411L. Note that __cpp_lib_raw_memory_algorithms 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.

  • 202411L P3369R0 constexpr for uninitialized_default_construct
  • 202411L P3508R0 Wording for constexpr for specialized memory algorithms
See also
<memory>

◆ LBAL_LIBCPP26_RCU

#define LBAL_LIBCPP26_RCU

Read-Copy Update (RCU).

SD-6 equivalent: __cpp_lib_rcu >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P2545R4 Read-Copy Update (RCU)
See also
<rcu>

◆ LBAL_LIBCPP26_REFERENCE_WRAPPER

#define LBAL_LIBCPP26_REFERENCE_WRAPPER

Comparisons for reference_wrapper.

SD-6 equivalent: __cpp_lib_reference_wrapper >= 202403L. This token will have a value of 0 if the proposal described here is not supported.

  • 202403L P2944R3 Comparisons for reference_wrapper
See also
freestanding <functional>

◆ LBAL_LIBCPP26_REFLECTION

#define LBAL_LIBCPP26_REFLECTION

Error Handling in Reflection.

SD-6 equivalent: __cpp_lib_reflection >= 202506L. Note that __cpp_lib_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.

  • 202506L P3560R2 Error Handling in Reflection
See also
<meta>

◆ LBAL_LIBCPP26_REFLECTION_CLEANUP

#define LBAL_LIBCPP26_REFLECTION_CLEANUP

Miscellaneous Reflection Cleanup.

SD-6 equivalent: __cpp_lib_reflection >= 202603L. Note that __cpp_lib_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.

  • 202603L P3795R2 Miscellaneous Reflection Cleanup
See also
<meta>

◆ LBAL_LIBCPP26_REFLECTION_RENAME_TO_IS_VARARG_FUNCTION

#define LBAL_LIBCPP26_REFLECTION_RENAME_TO_IS_VARARG_FUNCTION

Rename meta::has_ellipsis_parameter to meta::is_vararg_function.

SD-6 equivalent: __cpp_lib_reflection >= 202603L. Note that __cpp_lib_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.

  • 202603L P4156R0 Rename meta::has_ellipsis_parameter to meta::is_vararg_function
See also
<meta>

◆ LBAL_LIBCPP26_REPLACEABLE_CONTRACT_VIOLATION_HANDLER

#define LBAL_LIBCPP26_REPLACEABLE_CONTRACT_VIOLATION_HANDLER

Wording for AT1-057.

SD-6 equivalent: __cpp_lib_replaceable_contract_violation_handler >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P3886R0 Wording for AT1-057
See also
<contracts> freestanding

◆ LBAL_LIBCPP26_SATURATION_ARITHMETIC

#define LBAL_LIBCPP26_SATURATION_ARITHMETIC

Saturation arithmetic.

SD-6 equivalent: __cpp_lib_saturation_arithmetic >= 202311L. Note that __cpp_lib_saturation_arithmetic 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.

  • 202311L P0543R3 Saturation arithmetic
See also
freestanding <numeric>

◆ LBAL_LIBCPP26_SATURATION_ARITHMETIC_RENAMING

#define LBAL_LIBCPP26_SATURATION_ARITHMETIC_RENAMING

Renaming saturation arithmetic functions.

SD-6 equivalent: __cpp_lib_saturation_arithmetic >= 202603L. Note that __cpp_lib_saturation_arithmetic 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.

  • 202603L P4052R0 Renaming saturation arithmetic functions
See also
freestanding <numeric>

◆ LBAL_LIBCPP26_SENDERS

#define LBAL_LIBCPP26_SENDERS

std::execution

SD-6 equivalent: __cpp_lib_senders >= 202406L. Note that __cpp_lib_senders 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.

See also
<execution>

◆ LBAL_LIBCPP26_SENDERS_OPTIONAL

#define LBAL_LIBCPP26_SENDERS_OPTIONAL

optional variants in sender/receiver

SD-6 equivalent: __cpp_lib_senders >= 202506L. Note that __cpp_lib_senders 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.

  • 202506L P3570R2 optional variants in sender/ receiver
See also
<execution>

◆ LBAL_LIBCPP26_SIMD

#define LBAL_LIBCPP26_SIMD

std::simd - Merge data-parallel types from the Parallelism TS 2

SD-6 equivalent: __cpp_lib_simd >= 202411L. Note that __cpp_lib_simd 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.

  • 202411L P1928R15 std::simd - Merge data- parallel types from the Parallelism TS 2
See also
<simd>

◆ LBAL_LIBCPP26_SIMD_BIT

#define LBAL_LIBCPP26_SIMD_BIT

Extend <bit> header function with overloads for std::simd.

SD-6 equivalent: __cpp_lib_simd >= 202502L. Note that __cpp_lib_simd 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.

  • 202502L P2933R4 Extend header function with overloads for std::simd
See also
<simd>

◆ LBAL_LIBCPP26_SIMD_CHUNK

#define LBAL_LIBCPP26_SIMD_CHUNK

Rename simd_split to simd_chunk.

SD-6 equivalent: __cpp_lib_simd >= 202502L. Note that __cpp_lib_simd 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.

  • 202502L P3441R2 Rename simd_split to simd_chunk
See also
<simd>

◆ LBAL_LIBCPP26_SIMD_COMPLEX

#define LBAL_LIBCPP26_SIMD_COMPLEX

Proposal to support interleaved complex values in std::simd.

SD-6 equivalent: __cpp_lib_simd_complex >= 202502L. This token will have a value of 0 if the proposal described here is not supported.

  • 202502L P2663R7 Proposal to support interleaved complex values in std::simd
See also
<simd>

◆ LBAL_LIBCPP26_SIMD_DEDUCTION_GUIDES

#define LBAL_LIBCPP26_SIMD_DEDUCTION_GUIDES

Missing deduction guide from simd::mask to simd::vec.

SD-6 equivalent: __cpp_lib_simd >= 202511L. Note that __cpp_lib_simd 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.

  • 202511L P3922R1 Missing deduction guide from simd::mask to simd::vec
See also
<simd>

◆ LBAL_LIBCPP26_SIMD_EXTEND

#define LBAL_LIBCPP26_SIMD_EXTEND

Proposal to extend std::simd with more constructors and accessors.

SD-6 equivalent: __cpp_lib_simd >= 202506L. Note that __cpp_lib_simd 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.

  • 202506L P2876R3 Proposal to extend std::simd with more constructors and accessors
See also
<simd>

◆ LBAL_LIBCPP26_SIMD_IOTA

#define LBAL_LIBCPP26_SIMD_IOTA

Add an iota object for simd (and more).

SD-6 equivalent: __cpp_lib_simd >= 202603L. Note that __cpp_lib_simd 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.

  • 202603L P3319R6 Add an iota object for simd (and more)
See also
<simd>

◆ LBAL_LIBCPP26_SIMD_NAMESPACES

#define LBAL_LIBCPP26_SIMD_NAMESPACES

Exploration of namespaces for std::simd.

SD-6 equivalent: __cpp_lib_simd >= 202502L. Note that __cpp_lib_simd 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.

  • 202502L P3287R3 Exploration of namespaces for std::simd
See also
<simd>

◆ LBAL_LIBCPP26_SIMD_PERMUTATIONS

#define LBAL_LIBCPP26_SIMD_PERMUTATIONS

Proposal to extend std::simd with permutation API.

SD-6 equivalent: __cpp_lib_simd_permutations >= 202506L. This token will have a value of 0 if the proposal described here is not supported.

  • 202506L P2664R11 Proposal to extend std::simd with permutation API
See also
<simd>

◆ LBAL_LIBCPP26_SIMD_RANGE

#define LBAL_LIBCPP26_SIMD_RANGE

std::simd is a range

SD-6 equivalent: __cpp_lib_simd >= 202506L. Note that __cpp_lib_simd 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.

  • 202506L P3480R6 std::simd is a range
See also
<simd>

◆ LBAL_LIBCPP26_SMART_POINTER_OWNER_EQUALITY

#define LBAL_LIBCPP26_SMART_POINTER_OWNER_EQUALITY

Enabling the Use of weak_ptr as Keys in Unordered Associative Containers.

SD-6 equivalent: __cpp_lib_smart_pointer_owner_equality >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P1901R2 Enabling the Use of weak_ptr as Keys in Unordered Associative Containers
See also
<memory>

◆ LBAL_LIBCPP26_SMART_PTR_OWNER_EQUALITY

#define LBAL_LIBCPP26_SMART_PTR_OWNER_EQUALITY

Enabling the Use of weak_ptr as Keys in Unordered Associative Containers.

SD-6 equivalent: __cpp_lib_smart_ptr_owner_equality >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P1901R2 Enabling the Use of weak_ptr as Keys in Unordered Associative Containers
See also
<memory>

◆ LBAL_LIBCPP26_SPAN_AT

#define LBAL_LIBCPP26_SPAN_AT

span.at()

SD-6 equivalent: __cpp_lib_span >= 202311L. Note that __cpp_lib_span 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.

See also
freestanding <span>

◆ LBAL_LIBCPP26_SPAN_INITIALIZER_LIST

#define LBAL_LIBCPP26_SPAN_INITIALIZER_LIST

std::span over an initializer list

SD-6 equivalent: __cpp_lib_span_initializer_list >= 202311L. Note that __cpp_lib_span_initializer_list 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.

  • 202311L P2447R6 std::span over an initializer list
  • 202603L P4144R1 Remove span’s initializer_list constructor for C++26
Remarks
This is based on __cpp_lib_span_initializer_list, which was removed during the finalization of C++26.
See also
<span>

◆ LBAL_LIBCPP26_SPAN_MORE

#define LBAL_LIBCPP26_SPAN_MORE

Freestanding Library: inout expected span.

SD-6 equivalent: __cpp_lib_span >= 202311L. Note that __cpp_lib_span 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.

  • 202311L P2833R2 Freestanding Library: inout expected span
See also
freestanding <span>

◆ LBAL_LIBCPP26_SSTREAM_FROM_STRING_VIEW

#define LBAL_LIBCPP26_SSTREAM_FROM_STRING_VIEW

Interfacing stringstreams with string_view.

SD-6 equivalent: __cpp_lib_sstream_from_string_view >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P2495R3 Interfacing stringstreams with string_view
See also
<sstream>

◆ LBAL_LIBCPP26_START_LIFETIME

#define LBAL_LIBCPP26_START_LIFETIME

Adjustments to union Lifetime Rules.

SD-6 equivalent: __cpp_lib_start_lifetime >= 202603L. This token will have a value of 0 if the proposal described here is not supported.

  • 202603L P3726R2 Adjustments to union Lifetime Rules
See also
freestanding <memory>

◆ LBAL_LIBCPP26_STDBIT_H

#define LBAL_LIBCPP26_STDBIT_H

Add new library headers from C23.

SD-6 equivalent: __cpp_lib_stdbit_h >= 202603L. This token will have a value of 0 if the proposal described here is not supported.

  • 202603L P3370R1 Add new library headers from C23
See also
<stdbit.h>

◆ LBAL_LIBCPP26_STDCKDINT_H

#define LBAL_LIBCPP26_STDCKDINT_H

Add new library headers from C23.

SD-6 equivalent: __cpp_lib_stdckdint_h >= 202603L. This token will have a value of 0 if the proposal described here is not supported.

  • 202603L P3370R1 Add new library headers from C23
See also
<stdckdint.h>

◆ LBAL_LIBCPP26_STRING_SUBVIEW

#define LBAL_LIBCPP26_STRING_SUBVIEW

sub-string_view from string

SD-6 equivalent: __cpp_lib_string_subview >= 202506L. This token will have a value of 0 if the proposal described here is not supported.

  • 202506L P3044R2 sub-string_view from string
See also
<string> <string_view>

◆ LBAL_LIBCPP26_STRING_VIEW_CONCAT

#define LBAL_LIBCPP26_STRING_VIEW_CONCAT

Allow concatenation of std::string and std::string_view.

SD-6 equivalent: __cpp_lib_string_view >= 202403L. Note that __cpp_lib_string_view 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.

  • 202403L P2591R5 Concatenation of strings and string views
See also
<string> <string_view>

◆ LBAL_LIBCPP26_SUBMDSPAN

#define LBAL_LIBCPP26_SUBMDSPAN

submdspan

SD-6 equivalent: __cpp_lib_submdspan >= 202306L. Note that __cpp_lib_submdspan 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.

See also
freestanding <mdspan>

◆ LBAL_LIBCPP26_SUBMDSPAN_FIX

#define LBAL_LIBCPP26_SUBMDSPAN_FIX

Fix submdspan for C++26.

SD-6 equivalent: __cpp_lib_submdspan >= 202411L. Note that __cpp_lib_submdspan 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.

  • 202411L P3355R1 Fix submdspan for C++26
See also
freestanding <mdspan>

◆ LBAL_LIBCPP26_SUBMDSPAN_FUTURE_PROOF

#define LBAL_LIBCPP26_SUBMDSPAN_FUTURE_PROOF

Future-proof submdspan-mapping.

SD-6 equivalent: __cpp_lib_submdspan >= 202511L. Note that __cpp_lib_submdspan 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.

  • 202511L P3663R3 Future-proof submdspan- mapping
See also
freestanding <mdspan>

◆ LBAL_LIBCPP26_SUBMDSPAN_PADDED

#define LBAL_LIBCPP26_SUBMDSPAN_PADDED

Padded mdspan layouts.

SD-6 equivalent: __cpp_lib_submdspan >= 202403L. Note that __cpp_lib_submdspan 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.

  • 202403L P2642R6 Padded mdspan layouts
See also
freestanding <mdspan>

◆ LBAL_LIBCPP26_SUBMDSPAN_UPDATE

#define LBAL_LIBCPP26_SUBMDSPAN_UPDATE

Working Draft: Programming Languages—C++.

SD-6 equivalent: __cpp_lib_submdspan >= 202603L. Note that __cpp_lib_submdspan 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.

  • 202603L N5050 Working Draft: Programming Languages—C++
See also
freestanding <mdspan>

◆ LBAL_LIBCPP26_TASK

#define LBAL_LIBCPP26_TASK

Add a Coroutine Task Type.

SD-6 equivalent: __cpp_lib_task >= 202506L. This token will have a value of 0 if the proposal described here is not supported.

  • 202506L P3552R3 Add a Coroutine Task Type
See also
<execution>

◆ LBAL_LIBCPP26_TEXT_ENCODING

#define LBAL_LIBCPP26_TEXT_ENCODING

Naming Text Encodings to Demystify Them.

SD-6 equivalent: __cpp_lib_text_encoding >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P1885R12 Naming Text Encodings to Demystify Them
See also
<text_encoding>

◆ LBAL_LIBCPP26_TO_CHARS_BOOL_TEST

#define LBAL_LIBCPP26_TO_CHARS_BOOL_TEST

Test for success or failure of <charconv> functions.

SD-6 equivalent: __cpp_lib_to_chars >= 202306L. Note that __cpp_lib_to_chars 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.

  • 202306L P2497R0 Testing for success or failure of charconv functions
See also
<charconv>

◆ LBAL_LIBCPP26_TO_STRING

#define LBAL_LIBCPP26_TO_STRING

to_string or not to_string

SD-6 equivalent: __cpp_lib_to_string >= 202306L. This token will have a value of 0 if the proposal described here is not supported.

  • 202306L P2587R3 to_string or not to_string
See also
<string>

◆ LBAL_LIBCPP26_TUPLE_LIKE_COMPLEX

#define LBAL_LIBCPP26_TUPLE_LIKE_COMPLEX

Add tuple protocol to complex.

SD-6 equivalent: __cpp_lib_tuple_like >= 202311L. Note that __cpp_lib_tuple_like 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.

  • 202311L P2819R2 Add tuple protocol to complex
See also
<map> <tuple> <unordered_map> <utility>

◆ LBAL_LIBCPP26_TYPE_ORDER

#define LBAL_LIBCPP26_TYPE_ORDER

Standardized Constexpr Type Ordering.

SD-6 equivalent: __cpp_lib_type_order >= 202506L. This token will have a value of 0 if the proposal described here is not supported.

  • 202506L P2830R10 Standardized Constexpr Type Ordering
See also
<compare>

◆ LBAL_LIBCPP26_VALARRAY

#define LBAL_LIBCPP26_VALARRAY

Resolve inconsistencies in begin/end for valarray and braced initializer lists.

SD-6 equivalent: __cpp_lib_valarray >= 202511L. This token will have a value of 0 if the proposal described here is not supported.

  • 202511L P3016R6 Resolve inconsistencies in begin/end for valarray and braced initializer lists
See also
<valarray>

◆ LBAL_LIBCPP26_VARIANT_VISITOR

#define LBAL_LIBCPP26_VARIANT_VISITOR

Member visit for std::variant.

SD-6 equivalent: __cpp_lib_variant >= 202306L. Note that __cpp_lib_variant 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.

See also
<variant>

◆ LBAL_LIBCPP2D_BITOPS_BETTER_SHIFTING

#define LBAL_LIBCPP2D_BITOPS_BETTER_SHIFTING

Better Shifting.

SD-6 equivalent: __cpp_lib_bitops >= 202607L. Note that __cpp_lib_bitops 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.

See also
<bit> freestanding

◆ LBAL_LIBCPP2D_BITOPS_PERMUTATIONS

#define LBAL_LIBCPP2D_BITOPS_PERMUTATIONS

Bit permutations.

SD-6 equivalent: __cpp_lib_bitops >= 202607L. Note that __cpp_lib_bitops 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.

See also
<bit> freestanding

◆ LBAL_LIBCPP2D_CONSTANT_WRAPPER_REVERT_STRING

#define LBAL_LIBCPP2D_CONSTANT_WRAPPER_REVERT_STRING

Revert string support in std::constant_wrapper.

SD-6 equivalent: __cpp_lib_constant_wrapper >= 202606L. Note that __cpp_lib_constant_wrapper 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.

  • 202606L P4206R0 Revert string support in std::constant_wrapper
See also
freestanding <type_traits> <utility>

◆ LBAL_LIBCPP2D_EXPECTED_UEXPECTED

#define LBAL_LIBCPP2D_EXPECTED_UEXPECTED

The unexpected in std::expected.

SD-6 equivalent: __cpp_lib_expected >= 202606L. Note that __cpp_lib_expected 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.

  • 202606L P3798R1 The unexpected in std::expected
See also
<expected>

◆ LBAL_LIBCPP2D_HAZARD_POINTER_BATCHES

#define LBAL_LIBCPP2D_HAZARD_POINTER_BATCHES

Hazard Pointer Batches.

SD-6 equivalent: __cpp_lib_hazard_pointer >= 202606L. Note that __cpp_lib_hazard_pointer 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.

  • 202606L P3428R4 Hazard Pointer Batches
See also
<hazard_pointer>

◆ LBAL_LIBCPP2D_MAP_LOOKUP

#define LBAL_LIBCPP2D_MAP_LOOKUP

Better Lookups for map, unordered_map, and flat_map.

SD-6 equivalent: __cpp_lib_map_lookup >= 202606L. This token will have a value of 0 if the proposal described here is not supported.

  • 202606L P3091R6 Better Lookups for map, unordered_map, and flat_map

◆ LBAL_LIBCPP2D_MDSPAN_COPY

#define LBAL_LIBCPP2D_MDSPAN_COPY

Copy and fill for mdspan.

SD-6 equivalent: __cpp_lib_mdspan_copy >= 202606L. This token will have a value of 0 if the proposal described here is not supported.

  • 202606L P3242R4 Copy and fill for mdspan

◆ LBAL_LIBCPP2D_POINTER_TAG_PAIR

#define LBAL_LIBCPP2D_POINTER_TAG_PAIR

constexpr pointer tagging

SD-6 equivalent: __cpp_lib_pointer_tag_pair >= 202606L. This token will have a value of 0 if the proposal described here is not supported.

  • 202606L P3125R6 constexpr pointer tagging

◆ LBAL_LIBCPP2D_SIMD_BITOPS

#define LBAL_LIBCPP2D_SIMD_BITOPS

std::simd overloads for bit permutations

SD-6 equivalent: __cpp_lib_simd_bitops >= 202607L. This token will have a value of 0 if the proposal described here is not supported.

  • 202607L P3772R2 std::simd overloads for bit permutations

◆ LBAL_LIBCPP2D_SIMD_BITOPS_BETTER_SHIFTING

#define LBAL_LIBCPP2D_SIMD_BITOPS_BETTER_SHIFTING

Better Shifting.

SD-6 equivalent: __cpp_lib_simd_bitops >= 202607L. This token will have a value of 0 if the proposal described here is not supported.

◆ LBAL_LIBCPP2D_THREAD_ATTRIBUTES

#define LBAL_LIBCPP2D_THREAD_ATTRIBUTES

Thread attributes.

SD-6 equivalent: __cpp_lib_thread_attributes >= 202606L. This token will have a value of 0 if the proposal described here is not supported.

  • 202606L P2019R9 Thread attributes

◆ LBAL_LIBCPP2D_TO_CHARS_FIX_FLOAT

#define LBAL_LIBCPP2D_TO_CHARS_FIX_FLOAT

Fix the default floating-point representation in std::format.

SD-6 equivalent: __cpp_lib_to_chars >= 202606L. Note that __cpp_lib_to_chars 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.

  • 202606L P3505R4 Fix the default floating- point representation in std::format
See also
<charconv>

◆ LBAL_LIBCPP2D_VIEW_INTERFACE

#define LBAL_LIBCPP2D_VIEW_INTERFACE

view_interface::at()

SD-6 equivalent: __cpp_lib_view_interface >= 202606L. This token will have a value of 0 if the proposal described here is not supported.

  • 202606L P3052R2 view_interface::at()