lucenaBAL  2.0.0.20
Lucena Build Abstraction Library for C++
Standard Library Features

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

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

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

LBAL_LIBCPP20

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

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

LBAL_LIBCPPTS

C++ Technical Specifications that have not (yet?) been Standardized.

These are typically very far along and likely to clear the bar. Generally, these will eventually be aliased—and then moved—into LBAL_LIBCPP2B/LBAL_LIBCPP23, etc.

Remarks
SEEME The TSs can be highly mutable, and support should be considered very experimental. No effort at all will be expended to maintain backwards- compatibility with a TS once a feature has been voted in.
#define LBAL_LIBCPPTS_NETWORKING
 
#define LBAL_LIBCPPTS_NETWORKING_EXP
 
#define LBAL_LIBCPPTS_NETWORKING_EXTENSIBLE
 
#define LBAL_LIBCPPTS_NETWORKING_EXTENSIBLE_EXP
 
#define LBAL_LIBCPPTS_OBSERVER_PTR
 
#define LBAL_LIBCPPTS_OBSERVER_PTR_EXP
 

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:

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 Note that some of these also require language support. We try to note such cases when they arise.
SEEME 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 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.

Equivalent SD-6 macro: __cpp_lib_chrono_udls

See also
<chrono>

◆ LBAL_LIBCPP14_COMPLEX_UDLS

#define LBAL_LIBCPP14_COMPLEX_UDLS

User-defined Literals for <complex>

Equivalent SD-6 macro: __cpp_lib_complex_udls

See also
<complex>

◆ LBAL_LIBCPP14_EXCHANGE_FUNCTION

#define LBAL_LIBCPP14_EXCHANGE_FUNCTION

Add std::exchange utility function.

Equivalent SD-6 macro: __cpp_lib_exchange_function

See also
<utility>

◆ LBAL_LIBCPP14_GENERIC_ASSOCIATIVE_LOOKUP

#define LBAL_LIBCPP14_GENERIC_ASSOCIATIVE_LOOKUP

Add heterogeneous comparison lookup to associative containers.

Equivalent SD-6 macro: __cpp_lib_generic_associative_lookup

See also
<map> <set>

◆ LBAL_LIBCPP14_INTEGER_SEQUENCE

#define LBAL_LIBCPP14_INTEGER_SEQUENCE

Add template-based integer sequences.

Equivalent SD-6 macro: __cpp_lib_integer_sequence

See also
<utility>

◆ LBAL_LIBCPP14_INTEGRAL_CONSTANT_CALLABLE

#define LBAL_LIBCPP14_INTEGRAL_CONSTANT_CALLABLE

Add constexpr operator-() to std::integral_constant

Equivalent SD-6 macro: __cpp_lib_integral_constant_callable

See also
<type_traits>

◆ LBAL_LIBCPP14_IS_FINAL

#define LBAL_LIBCPP14_IS_FINAL

Detect finalized classes.

Equivalent SD-6 macro: __cpp_lib_is_final

See also
<type_traits>

◆ LBAL_LIBCPP14_IS_NULL_POINTER

#define LBAL_LIBCPP14_IS_NULL_POINTER

Detect null pointers.

Equivalent SD-6 macro: __cpp_lib_is_null_pointer

See also
<type_traits>

◆ LBAL_LIBCPP14_MAKE_REVERSE_ITERATOR

#define LBAL_LIBCPP14_MAKE_REVERSE_ITERATOR

std::make_reverse_iterator

Equivalent SD-6 macro: __cpp_lib_make_reverse_iterator

See also
<iterator>

◆ LBAL_LIBCPP14_MAKE_UNIQUE

#define LBAL_LIBCPP14_MAKE_UNIQUE

std::make_unique

Equivalent SD-6 macro: __cpp_lib_make_unique

See also
<memory>

◆ LBAL_LIBCPP14_NULL_ITERATORS

#define LBAL_LIBCPP14_NULL_ITERATORS

Allow value-initialized forward iterators to be compared.

Equivalent SD-6 macro: __cpp_lib_null_iterators

See also
<iterator>

◆ LBAL_LIBCPP14_QUOTED_STRING_IO

#define LBAL_LIBCPP14_QUOTED_STRING_IO

Add quoted-string sream i/o manipulator.

Equivalent SD-6 macro: __cpp_lib_quoted_string_io

See also
<iomanip>

◆ LBAL_LIBCPP14_RESULT_OF_SFINAE

#define LBAL_LIBCPP14_RESULT_OF_SFINAE

Make std::result_of SFINAE-friendly.

Equivalent SD-6 macro: __cpp_lib_result_of_sfinae

See also
<functional> <type_traits>

◆ LBAL_LIBCPP14_ROBUST_NONMODIFYING_SEQ_OPS

#define LBAL_LIBCPP14_ROBUST_NONMODIFYING_SEQ_OPS

Make non-modifying sequence operations more robust.

Equivalent SD-6 macro: __cpp_lib_robust_nonmodifying_seq_ops

See also
<algorithm>

◆ LBAL_LIBCPP14_SHARED_TIMED_MUTEX

#define LBAL_LIBCPP14_SHARED_TIMED_MUTEX

Rename std::shared_mutex to std::shared_timed_mutex

Equivalent SD-6 macro: __cpp_lib_shared_timed_mutex

See also
<shared_mutex>

◆ LBAL_LIBCPP14_STRING_UDLS

#define LBAL_LIBCPP14_STRING_UDLS

Predefine UDLs for strings.

Equivalent SD-6 macro: __cpp_lib_string_udls

See also
<string>

◆ LBAL_LIBCPP14_TRANSFORMATION_TRAIT_ALIASES

#define LBAL_LIBCPP14_TRANSFORMATION_TRAIT_ALIASES

Provide type aliases for transformation traits.

Equivalent SD-6 macro: __cpp_lib_transformation_trait_aliases

See also
<type_traits>

◆ LBAL_LIBCPP14_TRANSPARENT_OPERATORS

#define LBAL_LIBCPP14_TRANSPARENT_OPERATORS

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

Equivalent SD-6 macro: __cpp_lib_transparent_operators

See also
<functional> <memory>

◆ LBAL_LIBCPP14_TUPLE_ELEMENT_T

#define LBAL_LIBCPP14_TUPLE_ELEMENT_T

Add std::tuple element t type alias.

Equivalent SD-6 macro: __cpp_lib_tuple_element_t

See also
<tuple>

◆ LBAL_LIBCPP14_TUPLES_BY_TYPE

#define LBAL_LIBCPP14_TUPLES_BY_TYPE

Allow addressing std::tuples by type.

Equivalent SD-6 macro: __cpp_lib_tuples_by_type

See also
<tuple> <utility>

◆ LBAL_LIBCPP17_ADDRESSOF_CONSTEXPR

#define LBAL_LIBCPP17_ADDRESSOF_CONSTEXPR

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

Equivalent SD-6 macro: __cpp_lib_addressof_constexpr

See also
<memory>

◆ LBAL_LIBCPP17_ALLOCATOR_TRAITS_IS_ALWAYS_EQUAL

#define LBAL_LIBCPP17_ALLOCATOR_TRAITS_IS_ALWAYS_EQUAL

Clean up noexcept usage (Rev 3)

Equivalent SD-6 macro: __cpp_lib_allocator_traits_is_always_equal

See also
<deque> <forward_list> <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

Equivalent SD-6 macro: __cpp_lib_any. This token corresponds to the 201603L variant; it will only be set to a non-0 value if that variant is available.

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)

Equivalent SD-6 macro: __cpp_lib_any. This token corresponds to the 201606L variant; it will only be set to a non-0 value if that variant is available.

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

Equivalent SD-6 macro: __cpp_lib_apply

See also
<tuple>

◆ LBAL_LIBCPP17_ARRAY_CONSTEXPR

#define LBAL_LIBCPP17_ARRAY_CONSTEXPR

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

Equivalent SD-6 macro: __cpp_lib_array_constexpr. This token corresponds to the 201603L variant; it will only be set to a non-0 value if that variant is available.

See also
<array> <iterator>

◆ LBAL_LIBCPP17_AS_CONST

#define LBAL_LIBCPP17_AS_CONST

Add std::as_const helper function template.

Equivalent SD-6 macro: __cpp_lib_as_const

See also
<utility>

◆ LBAL_LIBCPP17_ATOMIC_IS_ALWAYS_LOCK_FREE

#define LBAL_LIBCPP17_ATOMIC_IS_ALWAYS_LOCK_FREE

Add constexpr atomic<T>::is_always_lock_free

Equivalent SD-6 macro: __cpp_lib_atomic_is_always_lock_free

See also
<atomic>

◆ LBAL_LIBCPP17_BOOL_CONSTANT

#define LBAL_LIBCPP17_BOOL_CONSTANT

Introduce std::bool_constant

Equivalent SD-6 macro: __cpp_lib_bool_constant

See also
<type_traits>

◆ LBAL_LIBCPP17_BOYER_MOORE_SEARCHER

#define LBAL_LIBCPP17_BOYER_MOORE_SEARCHER

Add text search components from Library Fundamentals V1 TS.

Equivalent SD-6 macro: __cpp_lib_boyer_moore_searcher

See also
<functional>

◆ LBAL_LIBCPP17_BYTE

#define LBAL_LIBCPP17_BYTE

Define std::byte type.

Equivalent SD-6 macro: __cpp_lib_byte

See also
<cstddef>

◆ LBAL_LIBCPP17_CHRONO

#define LBAL_LIBCPP17_CHRONO

Rounding and abs fixes for <chrono>

Equivalent SD-6 macro: __cpp_lib_chrono. This token corresponds to the 201510L variant; it will only be set to a non-0 value if that variant is available.

See also
<chrono>

◆ LBAL_LIBCPP17_CHRONO_CONSTEXPR

#define LBAL_LIBCPP17_CHRONO_CONSTEXPR

Add constexpr to certain <chrono> functions.

Equivalent SD-6 macro: __cpp_lib_chrono. This token corresponds to the 201611L variant; it will only be set to a non-0 value if that variant is available.

See also
<chrono>

◆ LBAL_LIBCPP17_CLAMP

#define LBAL_LIBCPP17_CLAMP

Standard clamping algorithm.

Equivalent SD-6 macro: __cpp_lib_clamp

See also
<algorithm>

◆ LBAL_LIBCPP17_ENABLE_SHARED_FROM_THIS

#define LBAL_LIBCPP17_ENABLE_SHARED_FROM_THIS

Re-enable std::shared_from_this

Equivalent SD-6 macro: __cpp_lib_enable_shared_from_this

Remarks
SEEME 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.

Equivalent SD-6 macro: __cpp_lib_execution

This token corresponds to the 201603L variant; it will only be set to a non-0 value if that variant is available.

By itself, this token does not measure compliance with the referenced Working Group paper; use LBAL_LIBCPP17_STANDARDIZATION_OF_PARALLELISM_TS.

Remarks
APIME We do not track experimental versions of this.
See also
<execution>

◆ LBAL_LIBCPP17_FILESYSTEM

#define LBAL_LIBCPP17_FILESYSTEM

Adopt File System TS.

Equivalent SD-6 macro: __cpp_lib_filesystem. This token corresponds to the 201603L variant; it will only be set to a non-0 value if that variant is available.

Remarks
SEEME 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>

Equivalent SD-6 macro: __cpp_lib_filesystem. This token corresponds to the 201703L variant; it will only be set to a non-0 value if that variant is available.

Remarks
SEEME 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.

Equivalent SD-6 macro: __cpp_lib_experimental_filesystem

Remarks
SEEME The experimental version differs in many ways from the final version, but it’s all that is offered until gcc 8 and clang 7.

◆ LBAL_LIBCPP17_FILESYSTEM_PATHS_EXPANDED

#define LBAL_LIBCPP17_FILESYSTEM_PATHS_EXPANDED

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

Equivalent SD-6 macro: __cpp_lib_filesystem. This token corresponds to the 201606L variants (both P0219R1 and P0392R0 were adopted at the same time). It will only be set to a non-0 value if these variants are available.

Remarks
SEEME Full implementation missing on Apple platforms prior to macOS 10.15.
See also
<filesystem>

◆ LBAL_LIBCPP17_GCD_LCM

#define LBAL_LIBCPP17_GCD_LCM

Add std::gcd and std::lcm

Equivalent SD-6 macro: __cpp_lib_gcd_lcm

See also
<numeric>

◆ LBAL_LIBCPP17_HARDWARE_INTERFERENCE_SIZE

#define LBAL_LIBCPP17_HARDWARE_INTERFERENCE_SIZE

Provide relevant cache line sizes for construction and destruction.

Equivalent SD-6 macro: __cpp_lib_hardware_interference_size

See also
<new>

◆ LBAL_LIBCPP17_HAS_UNIQUE_OBJECT_REPRESENTATIONS

#define LBAL_LIBCPP17_HAS_UNIQUE_OBJECT_REPRESENTATIONS

Add std::has_unique_object_representations

Equivalent SD-6 macro: __cpp_lib_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).

See also
<type_traits>

◆ LBAL_LIBCPP17_HYPOT

#define LBAL_LIBCPP17_HYPOT

Introduce a 3-argument overload to std::hypot

Equivalent SD-6 macro: __cpp_lib_hypot

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

See also
<cmath>

◆ LBAL_LIBCPP17_INCOMPLETE_CONTAINER_ELEMENTS

#define LBAL_LIBCPP17_INCOMPLETE_CONTAINER_ELEMENTS

Introduce minimal incomplete type support for Standard containers.

Equivalent SD-6 macro: __cpp_lib_incomplete_container_elements

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

See also
<forward_list> <list> <vector>

◆ LBAL_LIBCPP17_INVOKE

#define LBAL_LIBCPP17_INVOKE

Add std::invoke function template.

Equivalent SD-6 macro: __cpp_lib_invoke

See also
<functional>

◆ LBAL_LIBCPP17_IS_AGGREGATE

#define LBAL_LIBCPP17_IS_AGGREGATE

Add std::is_aggregate type trait.

Equivalent SD-6 macro: __cpp_lib_is_aggregate

See also
<type_traits>

◆ LBAL_LIBCPP17_IS_INVOCABLE

#define LBAL_LIBCPP17_IS_INVOCABLE

Add std::is_invocable type trait to replace is_callable

Equivalent SD-6 macro: __cpp_lib_is_invocable

See also
<type_traits>

◆ LBAL_LIBCPP17_IS_SWAPPABLE

#define LBAL_LIBCPP17_IS_SWAPPABLE

Add std::is_swappable type trait family.

Equivalent SD-6 macro: __cpp_lib_is_swappable

See also
<type_traits>

◆ LBAL_LIBCPP17_LAUNDER

#define LBAL_LIBCPP17_LAUNDER

Replacement of class objects containing reference members.

Equivalent SD-6 macro: __cpp_lib_launder

See also
<new>

◆ LBAL_LIBCPP17_LOGICAL_TRAITS

#define LBAL_LIBCPP17_LOGICAL_TRAITS

Provide type traits for performing logical operations.

Equivalent SD-6 macro: __cpp_lib_logical_traits

See also
<type_traits>

◆ LBAL_LIBCPP17_MAKE_FROM_TUPLE

#define LBAL_LIBCPP17_MAKE_FROM_TUPLE

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

Equivalent SD-6 macro: __cpp_lib_make_from_tuple

See also
<tuple>

◆ LBAL_LIBCPP17_MAP_TRY_EMPLACE

#define LBAL_LIBCPP17_MAP_TRY_EMPLACE

Improve insertion into std::map

Equivalent SD-6 macro: __cpp_lib_map_try_emplace

See also
<map>

◆ LBAL_LIBCPP17_MATH_SPECIAL_FUNCTIONS

#define LBAL_LIBCPP17_MATH_SPECIAL_FUNCTIONS

Incorporate math functions specified in IS 29124:2010.

Equivalent SD-6 macro: __cpp_lib_math_special_functions

See also
<cmath>

◆ LBAL_LIBCPP17_MEMORY_RESOURCE

#define LBAL_LIBCPP17_MEMORY_RESOURCE

Incorporate memory management components from Library Fundamentals V1 TS.

Equivalent SD-6 macro: __cpp_lib_memory_resource

See also
<memory_resource>

◆ LBAL_LIBCPP17_NODE_EXTRACT

#define LBAL_LIBCPP17_NODE_EXTRACT

Add splicing to associative containers.

Equivalent SD-6 macro: __cpp_lib_node_extract

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.

Equivalent SD-6 macro: __cpp_lib_nonmember_container_access

See also
<array> <deque> <forward_list> <iterator> <list> <map> <regex> <set> <string> <unordered_map> <unordered_set> <vector>

◆ LBAL_LIBCPP17_NOT_FN

#define LBAL_LIBCPP17_NOT_FN

Add std::not_fn

Equivalent SD-6 macro: __cpp_lib_not_fn

See also
<functional>

◆ LBAL_LIBCPP17_OPTIONAL

#define LBAL_LIBCPP17_OPTIONAL

Add std::optional

Equivalent SD-6 macro: __cpp_lib_optional. This token corresponds to the 201603L variant; it will only be set to a non-0 value if that variant is available.

See also
<optional>

◆ LBAL_LIBCPP17_OPTIONAL_GREATER_EQUAL

#define LBAL_LIBCPP17_OPTIONAL_GREATER_EQUAL

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

Equivalent SD-6 macro: __cpp_lib_optional. This token corresponds to the 201606L P0307R2 variant (P0032R3 was approved at the same time). It will only be set to a non-0 value if that variant is available.

See also
<optional>

◆ LBAL_LIBCPP17_OPTIONAL_INTERFACE

#define LBAL_LIBCPP17_OPTIONAL_INTERFACE

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

Equivalent SD-6 macro: __cpp_lib_optional. This token corresponds to the 201606L P0032R3 variant (P0307R2 was approved at the same time). It will only be set to a non-0 value if that variant is available.

See also
<optional>

◆ LBAL_LIBCPP17_PARALLEL_ALGORITHM

#define LBAL_LIBCPP17_PARALLEL_ALGORITHM

Standardize the Parallelism TS.

Equivalent SD-6 macro: __cpp_lib_parallel_algorithm

Remarks
By itself, this macro does not measure compliance with the Working Group paper; for that, use LBAL_LIBCPP17_STANDARDIZATION_OF_PARALLELISM_TS.
APIME We do not track experimental versions of this.
See also
<algorithm> <numeric>

◆ LBAL_LIBCPP17_RAW_MEMORY_ALGORITHMS

#define LBAL_LIBCPP17_RAW_MEMORY_ALGORITHMS

Supply tools for raw memory management.

Equivalent SD-6 macro: __cpp_lib_raw_memory_algorithms

See also
<memory>

◆ LBAL_LIBCPP17_SAMPLE

#define LBAL_LIBCPP17_SAMPLE

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

Equivalent SD-6 macro: __cpp_lib_sample

See also
<algorithm>

◆ LBAL_LIBCPP17_SCOPED_LOCK

#define LBAL_LIBCPP17_SCOPED_LOCK

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

Equivalent SD-6 macro: __cpp_lib_scoped_lock.

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.

Equivalent SD-6 macro: __cpp_lib_shared_mutex. This change was corresponds to the addition of an explicit std::shared_timed_mutex.

See also
<shared_mutex>

◆ LBAL_LIBCPP17_SHARED_PTR_ARRAYS

#define LBAL_LIBCPP17_SHARED_PTR_ARRAYS

Fix std::shared_ptr support for arrays.

Equivalent SD-6 macro: __cpp_lib_shared_ptr_arrays

See also
<memory>

◆ LBAL_LIBCPP17_SHARED_PTR_WEAK_TYPE

#define LBAL_LIBCPP17_SHARED_PTR_WEAK_TYPE

Add shared_ptr::weak_type

Equivalent SD-6 macro: __cpp_lib_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 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.

Equivalent SD-6 macro: __cpp_lib_string_view. This token corresponds to the 201603L variant; it will only be set to a non-0 value if that variant is available.

See also
<string> <string_view>

◆ LBAL_LIBCPP17_STRING_VIEW_INTERFACE

#define LBAL_LIBCPP17_STRING_VIEW_INTERFACE

Address interface inversion between <string> and <string_view>

Equivalent SD-6 macro: __cpp_lib_string_view. This token corresponds to the 201606L variant; it will only be set to a non-0 value if that variant is available.

See also
<string> <string_view>

◆ LBAL_LIBCPP17_TO_CHARS

#define LBAL_LIBCPP17_TO_CHARS

Elementary string conversions, revision 5.

Equivalent SD-6 macro: __cpp_lib_to_chars

This token tracks compliance with both the integer and floating-point variants of to_chars and from_chars.

Remarks
SEEME 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 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 LBAL_LIBCPP17_TO_CHARS_INTEGER

◆ LBAL_LIBCPP17_TO_CHARS_FP

#define LBAL_LIBCPP17_TO_CHARS_FP

Floating-point compliance with Elementary string conversions.

Equivalent SD-6 macro: none

This tracks the floating-point conversion portion of LBAL_LIBCPP17_TO_CHARS.

Remarks
SEEME 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 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 LBAL_LIBCPP17_TO_CHARS_INTEGER

◆ LBAL_LIBCPP17_TO_CHARS_INTEGER

#define LBAL_LIBCPP17_TO_CHARS_INTEGER

Integer compliance with Elementary string conversions.

Equivalent SD-6 macro: none

This tracks the integer conversion portion of LBAL_LIBCPP17_TO_CHARS.

Remarks
SEEME 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 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 LBAL_LIBCPP17_TO_CHARS_FP

◆ LBAL_LIBCPP17_TRANSPARENT_OPERATORS

#define LBAL_LIBCPP17_TRANSPARENT_OPERATORS

Make std::owner_less more flexible.

Equivalent SD-6 macro: __cpp_lib_transparent_operators

Remarks
SEEME 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
<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.

Equivalent SD-6 macro: __cpp_lib_type_trait_variable_templates

See also
<type_traits>

◆ LBAL_LIBCPP17_UNCAUGHT_EXCEPTIONS

#define LBAL_LIBCPP17_UNCAUGHT_EXCEPTIONS

Add std::uncaught_exceptions

Equivalent SD-6 macro: __cpp_lib_uncaught_exceptions

See also
<exception>

◆ LBAL_LIBCPP17_UNORDERED_MAP_TRY_EMPLACE

#define LBAL_LIBCPP17_UNORDERED_MAP_TRY_EMPLACE

Improve insertion into std::unordered_map

Equivalent SD-6 macro: __cpp_lib_unordered_map_try_emplace

See also
<unordered_map>

◆ LBAL_LIBCPP17_VARIANT

#define LBAL_LIBCPP17_VARIANT

Add std::variant

Equivalent SD-6 macro: __cpp_lib_variant

Remarks
We track all three proposals as one variant, 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.

Equivalent SD-6 macro: __cpp_lib_void_t

See also
<type_traits>

◆ LBAL_LIBCPP20_ARRAY_CONSTEXPR_COMPARISONS

#define LBAL_LIBCPP20_ARRAY_CONSTEXPR_COMPARISONS

Provide constexpr comparison operators for std::array

Equivalent SD-6 macro: __cpp_lib_array_constexpr. This token corresponds to the 201806L variant; it will only be set to a non-0 value if that variant is available.

See also
<array> <iterator>

◆ LBAL_LIBCPP20_ARRAY_CONSTEXPR_ITERATOR

#define LBAL_LIBCPP20_ARRAY_CONSTEXPR_ITERATOR

Define requirements for constexpr iterators.

Equivalent SD-6 macro: __cpp_lib_array_constexpr. This token corresponds to the 201803L variants; it will only be set to a non-0 value if those variants are available.

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> <iterator>

◆ LBAL_LIBCPP20_ARRAY_CONSTEXPR_UTILITIES

#define LBAL_LIBCPP20_ARRAY_CONSTEXPR_UTILITIES

Provide constexpr std::array swap and fill

Equivalent SD-6 macro: __cpp_lib_array_constexpr. This token corresponds to the 201811L variant; it will only be set to a non-0 value if that variant is available.

See also
<array> <iterator>

◆ LBAL_LIBCPP20_ASSUME_ALIGNED

#define LBAL_LIBCPP20_ASSUME_ALIGNED

Provide std::assume_aligned compiler hint utility function Library.

Equivalent SD-6 macro: __cpp_lib_assume_aligned

See also
<memory>

◆ LBAL_LIBCPP20_ATOMIC_FLAG_TEST

#define LBAL_LIBCPP20_ATOMIC_FLAG_TEST

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

Equivalent SD-6 macro: __cpp_lib_atomic_flag_test

See also
<atomic>

◆ LBAL_LIBCPP20_ATOMIC_FLOAT

#define LBAL_LIBCPP20_ATOMIC_FLOAT

Extend <atomic> support to floating point types.

Equivalent SD-6 macro: __cpp_lib_atomic_float

See also
<atomic>

◆ 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.

Equivalent SD-6 macro: __cpp_lib_atomic_lock_free_type_aliases

See also
<atomic>

◆ LBAL_LIBCPP20_ATOMIC_REF

#define LBAL_LIBCPP20_ATOMIC_REF

Allow atomic operations to apply to non-atomic objects.

Equivalent SD-6 macro: __cpp_lib_atomic_ref

See also
<atomic>

◆ LBAL_LIBCPP20_ATOMIC_SHARED_PTR

#define LBAL_LIBCPP20_ATOMIC_SHARED_PTR

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

Equivalent SD-6 macro: __cpp_lib_atomic_shared_ptr

See also
<memory>

◆ LBAL_LIBCPP20_ATOMIC_VALUE_INITIALIZATION

#define LBAL_LIBCPP20_ATOMIC_VALUE_INITIALIZATION

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

Equivalent SD-6 macro: __cpp_lib_atomic_value_initialization

See also
<atomic> <memory>

◆ LBAL_LIBCPP20_ATOMIC_WAIT

#define LBAL_LIBCPP20_ATOMIC_WAIT

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

Equivalent SD-6 macro: __cpp_lib_atomic_wait

See also
<atomic>

◆ LBAL_LIBCPP20_BARRIER

#define LBAL_LIBCPP20_BARRIER

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

Equivalent SD-6 macro: __cpp_lib_barrier

See also
<barrier>

◆ LBAL_LIBCPP20_BIND_FRONT

#define LBAL_LIBCPP20_BIND_FRONT

Introduce std::bind_front to supersede std::bind

Equivalent SD-6 macro: __cpp_lib_bind_front

This token corresponds to the 201811L variant; it will only be set to a non-0 value if that variant is available.

See also
<functional>

◆ LBAL_LIBCPP20_BIND_FRONT_NO_UNWRAP

#define LBAL_LIBCPP20_BIND_FRONT_NO_UNWRAP

Prevent std::bind_front from unwrapping std::reference_wrapper

Equivalent SD-6 macro: __cpp_lib_bind_front

This token corresponds to the 201907L variant; it will only be set to a non-0 value if that variant is available.

See also
<functional>

◆ LBAL_LIBCPP20_BIT_CAST

#define LBAL_LIBCPP20_BIT_CAST

Introduce robust casts between bit-compatible types.

Equivalent SD-6 macro: __cpp_lib_bit_cast

See also
<bit>

◆ LBAL_LIBCPP20_BITOPS

#define LBAL_LIBCPP20_BITOPS

Introduce support for hardware-level bit operations.

Equivalent SD-6 macro: __cpp_lib_bitops

See also
<bit>

◆ LBAL_LIBCPP20_BOUNDED_ARRAY_TRAITS

#define LBAL_LIBCPP20_BOUNDED_ARRAY_TRAITS

Introduce traits to distinguish between bounded and unbounded arrays.

Equivalent SD-6 macro: __cpp_lib_bounded_array_traits

See also
<type_traits>

◆ LBAL_LIBCPP20_CHAR8_T

#define LBAL_LIBCPP20_CHAR8_T

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

Equivalent SD-6 macro: __cpp_lib_char8_t

This token corresponds to the 201811L variant; it will only be set to a non-0 value if that variant is available.

See also
<atomic> <filesystem> <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

Equivalent SD-6 macro: __cpp_lib_char8_t

This token corresponds to the 201907L variant; it will only be set to a non-0 value if that variant is available.

See also
<atomic> <filesystem> <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>

Equivalent SD-6 macro: __cpp_lib_chrono. This token corresponds to the 201803L variant; it will only be set to a non-0 value if that variant is available.

See also
<chrono>

◆ LBAL_LIBCPP20_CHRONO_FIXES

#define LBAL_LIBCPP20_CHRONO_FIXES

Miscellaneous minor fixes for <chrono>

Equivalent SD-6 macro: __cpp_lib_chrono. This token corresponds to the 201907L variant; it will only be set to a non-0 value if that variant is available.

See also
<chrono>

◆ LBAL_LIBCPP20_CONCEPTS

#define LBAL_LIBCPP20_CONCEPTS

Standard Library Concepts.

Equivalent SD-6 macro: __cpp_lib_concepts. This token corresponds to the 201806L variant; it will only be set to a non-0 value if that variant is available.

See also
<concepts>

◆ LBAL_LIBCPP20_CONCEPTS_BOOLEAN_TESTABLE

#define LBAL_LIBCPP20_CONCEPTS_BOOLEAN_TESTABLE

Wording for boolean-testable.

Equivalent SD-6 macro: __cpp_lib_concepts. This token corresponds to the 202002L variant; it will only be set to a non-0 value if that variant is available.

See also
<concepts>

◆ LBAL_LIBCPP20_CONCEPTS_EXP

#define LBAL_LIBCPP20_CONCEPTS_EXP

Experimental version of Standard Library Concepts.

Equivalent SD-6 macro: __cpp_lib_experimental_concepts

See also
<experimental/concepts>

◆ LBAL_LIBCPP20_CONCEPTS_STANDARD_CASE

#define LBAL_LIBCPP20_CONCEPTS_STANDARD_CASE

Rename C++ Concepts to use standard_case.

Equivalent SD-6 macro: __cpp_lib_concepts. This token corresponds to the 201907L variant; it will only be set to a non-0 value if that variant is available.

See also
<concepts>

◆ LBAL_LIBCPP20_CONSTEXPR_ALGORITHMS

#define LBAL_LIBCPP20_CONSTEXPR_ALGORITHMS

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

Equivalent SD-6 macro: __cpp_lib_constexpr_algorithms

This token corresponds to the 201703L variant; it will only be set to a non-0 value if that variant is available.

See also
<algorithm>

◆ LBAL_LIBCPP20_CONSTEXPR_ALGORITHMS_SWAP

#define LBAL_LIBCPP20_CONSTEXPR_ALGORITHMS_SWAP

Add constexpr to std::swap and related functions.

Equivalent SD-6 macro: __cpp_lib_constexpr_algorithms. This token corresponds to the 201806L variant; it will only be set to a non-0 value if that variant is available.

See also
<algorithm>

◆ LBAL_LIBCPP20_CONSTEXPR_COMPLEX

#define LBAL_LIBCPP20_CONSTEXPR_COMPLEX

Add more constexpr support to <complex>

Equivalent SD-6 macro: __cpp_lib_constexpr_complex

See also
<complex>

◆ LBAL_LIBCPP20_CONSTEXPR_DYNAMIC_ALLOC

#define LBAL_LIBCPP20_CONSTEXPR_DYNAMIC_ALLOC

Add constexpr memory allocators used by dynamic containers.

Equivalent SD-6 macro: __cpp_lib_constexpr_dynamic_alloc

See also
<memory>

◆ LBAL_LIBCPP20_CONSTEXPR_FUNCTIONAL

#define LBAL_LIBCPP20_CONSTEXPR_FUNCTIONAL

Make more of <functional> constexpr

Equivalent SD-6 macro: __cpp_lib_constexpr_functional. This token corresponds to the 201811L variant; it will only be set to a non-0 value if that variant is available.

See also
<functional>

◆ LBAL_LIBCPP20_CONSTEXPR_FUNCTIONAL_INVOKE

#define LBAL_LIBCPP20_CONSTEXPR_FUNCTIONAL_INVOKE

Make std::invoke constexpr

Equivalent SD-6 macro: __cpp_lib_constexpr_functional. This token corresponds to the 201907L variant; it will only be set to a non-0 value if that variant is available.

See also
<functional>

◆ LBAL_LIBCPP20_CONSTEXPR_ITERATOR

#define LBAL_LIBCPP20_CONSTEXPR_ITERATOR

Make more of <iterator> constexpr

Equivalent SD-6 macro: __cpp_lib_constexpr_iterator

See also
<iterator>

◆ LBAL_LIBCPP20_CONSTEXPR_MEMORY

#define LBAL_LIBCPP20_CONSTEXPR_MEMORY

Make std::pointer_traits constexpr

Equivalent SD-6 macro: __cpp_lib_constexpr_memory

See also
<memory>

◆ LBAL_LIBCPP20_CONSTEXPR_NUMERIC

#define LBAL_LIBCPP20_CONSTEXPR_NUMERIC

Make numeric algorithms constexpr

Equivalent SD-6 macro: __cpp_lib_constexpr_numeric

See also
<numeric>

◆ LBAL_LIBCPP20_CONSTEXPR_STRING

#define LBAL_LIBCPP20_CONSTEXPR_STRING

Make std::string constexpr

Equivalent SD-6 macro: __cpp_lib_constexpr_string

See also
<string>

◆ LBAL_LIBCPP20_CONSTEXPR_STRING_VIEW

#define LBAL_LIBCPP20_CONSTEXPR_STRING_VIEW

Make more of <string_view> constexpr

Equivalent SD-6 macro: __cpp_lib_constexpr_string_view

See also
<string_view>

◆ LBAL_LIBCPP20_CONSTEXPR_TUPLE

#define LBAL_LIBCPP20_CONSTEXPR_TUPLE

Make more of <tuple> constexpr

Equivalent SD-6 macro: __cpp_lib_constexpr_tuple

See also
<tuple>

◆ LBAL_LIBCPP20_CONSTEXPR_UTILITY

#define LBAL_LIBCPP20_CONSTEXPR_UTILITY

Make more of <tuple> constexpr

Equivalent SD-6 macro: __cpp_lib_constexpr_utility

See also
<utility>

◆ LBAL_LIBCPP20_CONSTEXPR_VECTOR

#define LBAL_LIBCPP20_CONSTEXPR_VECTOR

Make std::vector constexpr

Equivalent SD-6 macro: __cpp_lib_constexpr_vector

See also
<vector>

◆ LBAL_LIBCPP20_COROUTINE

#define LBAL_LIBCPP20_COROUTINE

Standard Library coroutines.

Equivalent SD-6 macro: __cpp_lib_coroutine

Remarks
Note that <coroutine> requires language support.
SEEME Confusingly, n4736 PDF was voted into the Standard, but n4760 PDF is the fixed version of it.
See also
<coroutine>

◆ LBAL_LIBCPP20_COROUTINE_EXP

#define LBAL_LIBCPP20_COROUTINE_EXP

Experimental Standard Library coroutines.

Equivalent SD-6 macro: __cpp_lib_experimental_coroutine

Remarks
Note that <coroutine> requires language support.
SEEME Confusingly, n4736 PDF was voted into the Standard, but n4760 PDF is the fixed version of it.
See also
<experimental/coroutine>

◆ LBAL_LIBCPP20_DESTROYING_DELETE

#define LBAL_LIBCPP20_DESTROYING_DELETE

Efficient sized delete for variable-sized classes.

Equivalent SD-6 macro: __cpp_lib_destroying_delete

See also
<new>

◆ LBAL_LIBCPP20_ENDIAN

#define LBAL_LIBCPP20_ENDIAN

Add std::endian enum.

Equivalent SD-6 macro: __cpp_lib_endian

This token corresponds to the P0463R1 variant; it will only be set to a non-0 value if that variant is available.

See also
<bit>

◆ LBAL_LIBCPP20_ENDIAN_BIT

#define LBAL_LIBCPP20_ENDIAN_BIT

Relocate std::endian to <bit>

Equivalent SD-6 macro: __cpp_lib_endian

This token corresponds to the P1612R1 variant; it will only be set to a non-0 value if that variant is available.

See also
<bit>

◆ LBAL_LIBCPP20_ERASE_IF

#define LBAL_LIBCPP20_ERASE_IF

Adopt consistent container erasure.

Equivalent SD-6 macro: __cpp_lib_erase_if

This token corresponds to the 201811L variant; it will only be set to a non-0 value if that variant is available.

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.

Equivalent SD-6 macro: __cpp_lib_erase_if

This token corresponds to the 202002L variant; it will only be set to a non-0 value if that variant is available.

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.

Equivalent SD-6 macro: __cpp_lib_execution

This token corresponds to the 201902L variant; it will only be set to a non-0 value if that variant is available.

By itself, this token does not measure compliance with the referenced Working Group paper; use LBAL_LIBCPP17_STANDARDIZATION_OF_PARALLELISM_TS.

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

Equivalent SD-6 macro: __cpp_lib_format

See also
<format>

◆ LBAL_LIBCPP20_GENERIC_UNORDERED_HASH_LOOKUP

#define LBAL_LIBCPP20_GENERIC_UNORDERED_HASH_LOOKUP

The feature was removed prior to Standardization.

Equivalent SD-6 macro: __cpp_lib_generic_unordered_hash_lookup

This is an unusual example of a feature that was voted into the Standard and then promptly voted out.

Remarks
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.

Equivalent SD-6 macro: __cpp_lib_generic_unordered_lookup

See also
<unordered_map> <unordered_set>

◆ LBAL_LIBCPP20_INT_POW2

#define LBAL_LIBCPP20_INT_POW2

Integral power-of-2 operations.

Equivalent SD-6 macro: __cpp_lib_int_pow2. This token corresponds to the 201806L variant; it will only be set to a non-0 value if that variant is available.

See also
<bit>

◆ LBAL_LIBCPP20_INT_POW2_FUNCTION_RENAME

#define LBAL_LIBCPP20_INT_POW2_FUNCTION_RENAME

Rename the assorted bit-manipulation fucntions.

Equivalent SD-6 macro: __cpp_lib_int_pow2. This token corresponds to the 202002L variant; it will only be set to a non-0 value if that variant is available.

See also
<bit>

◆ LBAL_LIBCPP20_INTEGER_COMPARISON_FUNCTIONS

#define LBAL_LIBCPP20_INTEGER_COMPARISON_FUNCTIONS

Add Safe integral comparisons.

Equivalent SD-6 macro: __cpp_lib_integer_comparison_functions

See also
<utility>

◆ LBAL_LIBCPP20_INTERPOLATE

#define LBAL_LIBCPP20_INTERPOLATE

Add well-behaved interpolation for numbers and pointers.

Equivalent SD-6 macro: __cpp_lib_interpolate

See also
<cmath> <numeric>

◆ LBAL_LIBCPP20_IS_CONSTANT_EVALUATED

#define LBAL_LIBCPP20_IS_CONSTANT_EVALUATED

Add std::is_constant_evaluated type trait.

Equivalent SD-6 macro: __cpp_lib_is_constant_evaluated

See also
<type_traits>

◆ LBAL_LIBCPP20_IS_LAYOUT_COMPATIBLE

#define LBAL_LIBCPP20_IS_LAYOUT_COMPATIBLE

Add std::is_layout_compatible type trait.

Equivalent SD-6 macro: __cpp_lib_is_layout_compatible

See also
<type_traits>

◆ LBAL_LIBCPP20_IS_NOTHROW_CONVERTIBLE

#define LBAL_LIBCPP20_IS_NOTHROW_CONVERTIBLE

Add std::is_nothrow_convertible type trait.

Equivalent SD-6 macro: __cpp_lib_is_nothrow_convertible

  • 201806L
  • 201806L
    Remarks
    SEEME LWG3356 should probably have gotten its own value; the argument against that is that it was a defect corrected prior to Standardization.
    See also
    <type_traits>

◆ LBAL_LIBCPP20_IS_POINTER_INTERCONVERTIBLE

#define LBAL_LIBCPP20_IS_POINTER_INTERCONVERTIBLE

Add std::is_pointer_interconvertible type trait.

Equivalent SD-6 macro: __cpp_lib_is_pointer_interconvertible

See also
<type_traits>

◆ LBAL_LIBCPP20_JTHREAD

#define LBAL_LIBCPP20_JTHREAD

Add a cooperatively interruptible joining thread.

Equivalent SD-6 macro: __cpp_lib_jthread. This token corresponds to the 201907L variant; it will only be set to a non-0 value if that variant is available.

See also
<stop_token> <thread>

◆ LBAL_LIBCPP20_JTHREAD_CV

#define LBAL_LIBCPP20_JTHREAD_CV

Simplify condition variable API.

Equivalent SD-6 macro: __cpp_lib_jthread. This token corresponds to the 201911L variant; it will only be set to a non-0 value if that variant is available.

See also
<stop_token> <thread>

◆ LBAL_LIBCPP20_LATCH

#define LBAL_LIBCPP20_LATCH

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

Equivalent SD-6 macro: __cpp_lib_latch

See also
<latch>

◆ LBAL_LIBCPP20_LIST_REMOVE_RETURN_TYPE

#define LBAL_LIBCPP20_LIST_REMOVE_RETURN_TYPE

Improve the return value of erase-like algorithms.

Equivalent SD-6 macro: __cpp_lib_list_remove_return_type

See also
<forward_list> <list>

◆ LBAL_LIBCPP20_MATH_CONSTANTS

#define LBAL_LIBCPP20_MATH_CONSTANTS

Add common math constants to the C++ Standard.

Equivalent SD-6 macro: __cpp_lib_math_constants

See also
<numbers>

◆ LBAL_LIBCPP20_POLYMORPHIC_ALLOCATOR

#define LBAL_LIBCPP20_POLYMORPHIC_ALLOCATOR

Provide a default template argument for std::polymorphic_allocator

Equivalent SD-6 macro: __cpp_lib_polymorphic_allocator

See also
<memory>

◆ LBAL_LIBCPP20_RANGES

#define LBAL_LIBCPP20_RANGES

Incorporate ranges into the C++ Standard.

Equivalent SD-6 macro: __cpp_lib_ranges. This token corresponds to the 201811L variant; it will only be set to a non-0 value if that variant is available.

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

◆ LBAL_LIBCPP20_RANGES_INPUT_ADAPTORS

#define LBAL_LIBCPP20_RANGES_INPUT_ADAPTORS

Add input range adaptors.

Equivalent SD-6 macro: __cpp_lib_ranges. This token corresponds to the 201907L variant; it will only be set to a non-0 value if that variant is available.

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.

Equivalent SD-6 macro: __cpp_lib_ranges. This token corresponds to the 201911L variant; it will only be set to a non-0 value if that variant is available.

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

◆ LBAL_LIBCPP20_REMOVE_CVREF

#define LBAL_LIBCPP20_REMOVE_CVREF

Add std::remove_cvref type trait.

Equivalent SD-6 macro: __cpp_lib_remove_cvref

See also
<type_traits>

◆ LBAL_LIBCPP20_SEMAPHORE

#define LBAL_LIBCPP20_SEMAPHORE

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

Equivalent SD-6 macro: __cpp_lib_semaphore

See also
<semaphore>

◆ LBAL_LIBCPP20_SHARED_PTR_ARRAYS

#define LBAL_LIBCPP20_SHARED_PTR_ARRAYS

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

Equivalent SD-6 macro: __cpp_lib_shared_ptr_arrays

See also
<memory>

◆ LBAL_LIBCPP20_SHIFT

#define LBAL_LIBCPP20_SHIFT

Add std::shift_left and std::shift_right

Equivalent SD-6 macro: __cpp_lib_shared_ptr_arrays

See also
<algorithm>

◆ LBAL_LIBCPP20_SMART_PTR_FOR_OVERWRITE

#define LBAL_LIBCPP20_SMART_PTR_FOR_OVERWRITE

Support smart pointer creation with default initialization.

Equivalent SD-6 macro: __cpp_lib_smart_ptr_for_overwrite

◆ LBAL_LIBCPP20_SOURCE_LOCATION

#define LBAL_LIBCPP20_SOURCE_LOCATION

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

Equivalent SD-6 macro: __cpp_lib_source_location

See also
<source_location>

◆ LBAL_LIBCPP20_SPAN

#define LBAL_LIBCPP20_SPAN

Add std::span

Equivalent SD-6 macro: __cpp_lib_span. This token corresponds to the 201803L variant; it will only be set to a non-0 value if that variant is available.

Remarks
The issue raised in LWG3274 was simply that P0122R7 had been voted in without specifying an SD-6 macro.
See also
<span>

◆ LBAL_LIBCPP20_SPAN_FIXED_SIZE

#define LBAL_LIBCPP20_SPAN_FIXED_SIZE

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

Equivalent SD-6 macro: __cpp_lib_span. This token corresponds to the 202002L variant; it will only be set to a non-0 value if that variant is available.

See also
<span>

◆ LBAL_LIBCPP20_SPAN_USABILITY

#define LBAL_LIBCPP20_SPAN_USABILITY

Enhance usability for std::span

Equivalent SD-6 macro: __cpp_lib_span. This token corresponds to the 201902L variant; it will only be set to a non-0 value if that variant is available.

See also
<span>

◆ LBAL_LIBCPP20_SSIZE

#define LBAL_LIBCPP20_SSIZE

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

Equivalent SD-6 macro: __cpp_lib_ssize

Remarks
It’s conceivable that the <span>-affecting portions of this will be shifted to the __cpp_lib_span token.
See also
<iterator> <span>

◆ LBAL_LIBCPP20_STARTS_ENDS_WITH

#define LBAL_LIBCPP20_STARTS_ENDS_WITH

Add string prefix- and suffix-checking.

Equivalent SD-6 macro: __cpp_lib_starts_ends_with

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>

Equivalent SD-6 macro: __cpp_lib_string_view. This token corresponds to the 201803L variant; it will only be set to a non-0 value if that variant is available.

Remarks
The issue raised in LWG3257 was simply that the SD-6 macro update voted in with 201803L had not been applied.
See also
<string> <string_view>

◆ LBAL_LIBCPP20_SYNCBUF

#define LBAL_LIBCPP20_SYNCBUF

Add synchronized buffered output streams.

Equivalent SD-6 macro: __cpp_lib_syncbuf. This token corresponds to the 201711L variant; it will only be set to a non-0 value if that variant is available.

See also
<syncstream>

◆ LBAL_LIBCPP20_SYNCBUF_MANIPULATORS

#define LBAL_LIBCPP20_SYNCBUF_MANIPULATORS

Add manipulators for synchronized buffered output streams.

Equivalent SD-6 macro: __cpp_lib_syncbuf. This token corresponds to the 201803L variant; it will only be set to a non-0 value if that variant is available.

See also
<syncstream>

◆ LBAL_LIBCPP20_THREE_WAY_COMPARISON

#define LBAL_LIBCPP20_THREE_WAY_COMPARISON

Add <compare> to the Standard Library.

Equivalent SD-6 macro: __cpp_lib_three_way_comparison. This token corresponds to the 201711L variant; it will only be set to a non-0 value if that variant is available.

See also
<compare>

◆ LBAL_LIBCPP20_THREE_WAY_COMPARISON_LIBRARY

#define LBAL_LIBCPP20_THREE_WAY_COMPARISON_LIBRARY

Add three-way comparison support to the Standard Library.

Equivalent SD-6 macro: __cpp_lib_three_way_comparison. This token corresponds to the 201907L variant; it will only be set to a non-0 value if that variant is available.

See also
<compare>

◆ LBAL_LIBCPP20_TO_ADDRESS

#define LBAL_LIBCPP20_TO_ADDRESS

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

Equivalent SD-6 macro: __cpp_lib_to_address

See also
<memory>

◆ LBAL_LIBCPP20_TO_ARRAY

#define LBAL_LIBCPP20_TO_ARRAY

Adopt std::to_array from the Library Fundamentals TS.

Equivalent SD-6 macro: __cpp_lib_to_array

See also
<array>

◆ LBAL_LIBCPP20_TYPE_IDENTITY

#define LBAL_LIBCPP20_TYPE_IDENTITY

Add the std::identity metafunction.

Equivalent SD-6 macro: __cpp_lib_type_identity

See also
<type_traits>

◆ LBAL_LIBCPP20_UNWRAP_REF

#define LBAL_LIBCPP20_UNWRAP_REF

Add std::unwrap_reference and std::unwrap_ref_decay

Equivalent SD-6 macro: __cpp_lib_unwrap_ref

  • 201811L PDF
  • 201811L
    Remarks
    LWG3348 just moved this to <functional> from <type_traits>.
    See also
    <functional>

◆ LBAL_LIBCPP20_VERSION

#define LBAL_LIBCPP20_VERSION

Equivalent SD-6 macro: none

This identifies whether <version> is present and include-able given the current C++ Standard dialect in use (some implementations may choose to back-port <version> to earlier releases).

Note that unlike <version>, lucenaBAL tracks “correct”, functioning implementations only. So, for example, Xcode’s false positives for <any> and friends won’t be reported as support for the library feature. For this reason, it is recommended to always favor the lucenaBAL reporting of a given feature’s availability, even when <version> is available.

https://wg21.link/p0754r2 PDF

◆ LBAL_LIBCPPTS_NETWORKING

#define LBAL_LIBCPPTS_NETWORKING

Equivalent SD-6 macro: __cpp_lib_net

https://wg21.link/n4734 PDF

◆ LBAL_LIBCPPTS_NETWORKING_EXP

#define LBAL_LIBCPPTS_NETWORKING_EXP

Equivalent SD-6 macro: __cpp_lib_experimental_net

https://wg21.link/n4734 PDF

◆ LBAL_LIBCPPTS_NETWORKING_EXTENSIBLE

#define LBAL_LIBCPPTS_NETWORKING_EXTENSIBLE

Equivalent SD-6 macro: __cpp_lib_net_extensible

https://wg21.link/n4734 PDF

◆ LBAL_LIBCPPTS_NETWORKING_EXTENSIBLE_EXP

#define LBAL_LIBCPPTS_NETWORKING_EXTENSIBLE_EXP

Equivalent SD-6 macro: __cpp_lib_experimental_net_extensible

https://wg21.link/n4734 PDF

◆ LBAL_LIBCPPTS_OBSERVER_PTR

#define LBAL_LIBCPPTS_OBSERVER_PTR

Equivalent SD-6 macro: __cpp_lib_observer_ptr

https://wg21.link/n4282 PDF https://wg21.link/n4758

◆ LBAL_LIBCPPTS_OBSERVER_PTR_EXP

#define LBAL_LIBCPPTS_OBSERVER_PTR_EXP

Equivalent SD-6 macro: __cpp_lib_experimental_observer_ptr

https://wg21.link/n4282 PDF https://wg21.link/n4758