lucenaBAL
2.0.0.20
Lucena Build Abstraction Library for C++
|
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::tuple s 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.
| |
#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.
| |
#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 |
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:
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.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.
0
, but in the latter case the client may override us, and in the former we’ll override the override.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.#define LBAL_LIBCPP14_CHRONO_UDLS |
User-defined Literals for <chrono>
types.
Equivalent SD-6 macro: __cpp_lib_chrono_udls
<chrono>
#define LBAL_LIBCPP14_COMPLEX_UDLS |
User-defined Literals for <complex>
Equivalent SD-6 macro: __cpp_lib_complex_udls
<complex>
#define LBAL_LIBCPP14_EXCHANGE_FUNCTION |
Add std::exchange
utility function.
Equivalent SD-6 macro: __cpp_lib_exchange_function
<utility>
#define LBAL_LIBCPP14_GENERIC_ASSOCIATIVE_LOOKUP |
Add heterogeneous comparison lookup to associative containers.
Equivalent SD-6 macro: __cpp_lib_generic_associative_lookup
<map>
<set>
#define LBAL_LIBCPP14_INTEGER_SEQUENCE |
Add template-based integer sequences.
Equivalent SD-6 macro: __cpp_lib_integer_sequence
<utility>
#define LBAL_LIBCPP14_INTEGRAL_CONSTANT_CALLABLE |
Add constexpr
operator-() to std::integral_constant
Equivalent SD-6 macro: __cpp_lib_integral_constant_callable
<type_traits>
#define LBAL_LIBCPP14_IS_FINAL |
#define LBAL_LIBCPP14_IS_NULL_POINTER |
Detect null pointers.
Equivalent SD-6 macro: __cpp_lib_is_null_pointer
<type_traits>
#define LBAL_LIBCPP14_MAKE_REVERSE_ITERATOR |
std::make_reverse_iterator
Equivalent SD-6 macro: __cpp_lib_make_reverse_iterator
<iterator>
#define LBAL_LIBCPP14_MAKE_UNIQUE |
#define LBAL_LIBCPP14_NULL_ITERATORS |
Allow value-initialized forward iterators to be compared.
Equivalent SD-6 macro: __cpp_lib_null_iterators
<iterator>
#define LBAL_LIBCPP14_QUOTED_STRING_IO |
Add quoted-string sream i/o manipulator.
Equivalent SD-6 macro: __cpp_lib_quoted_string_io
<iomanip>
#define LBAL_LIBCPP14_RESULT_OF_SFINAE |
Make std::result_of
SFINAE-friendly.
Equivalent SD-6 macro: __cpp_lib_result_of_sfinae
<functional>
<type_traits>
#define LBAL_LIBCPP14_ROBUST_NONMODIFYING_SEQ_OPS |
Make non-modifying sequence operations more robust.
Equivalent SD-6 macro: __cpp_lib_robust_nonmodifying_seq_ops
<algorithm>
#define LBAL_LIBCPP14_SHARED_TIMED_MUTEX |
Rename std::shared_mutex
to std::shared_timed_mutex
Equivalent SD-6 macro: __cpp_lib_shared_timed_mutex
<shared_mutex>
#define LBAL_LIBCPP14_STRING_UDLS |
Predefine UDLs for strings.
Equivalent SD-6 macro: __cpp_lib_string_udls
<string>
#define LBAL_LIBCPP14_TRANSFORMATION_TRAIT_ALIASES |
Provide type aliases for transformation traits.
Equivalent SD-6 macro: __cpp_lib_transformation_trait_aliases
<type_traits>
#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
<functional>
<memory>
#define LBAL_LIBCPP14_TUPLE_ELEMENT_T |
Add std::tuple element t
type alias.
Equivalent SD-6 macro: __cpp_lib_tuple_element_t
<tuple>
#define LBAL_LIBCPP14_TUPLES_BY_TYPE |
Allow addressing std::tuple
s by type.
Equivalent SD-6 macro: __cpp_lib_tuples_by_type
<tuple>
<utility>
#define LBAL_LIBCPP17_ADDRESSOF_CONSTEXPR |
Make std::addressof
constexpr
, as per defect report.
Equivalent SD-6 macro: __cpp_lib_addressof_constexpr
<memory>
#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
<deque>
<forward_list>
<list>
<map>
<memory>
<scoped_allocator>
<set>
<string>
<unordered_map>
<unordered_set>
<vector>
#define LBAL_LIBCPP17_ANY |
#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.
<any>
#define LBAL_LIBCPP17_APPLY |
std::apply
component from Library Fundamentals V1 TS
Equivalent SD-6 macro: __cpp_lib_apply
<tuple>
#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.
<array>
<iterator>
#define LBAL_LIBCPP17_AS_CONST |
Add std::as_const
helper function template.
Equivalent SD-6 macro: __cpp_lib_as_const
<utility>
#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
<atomic>
#define LBAL_LIBCPP17_BOOL_CONSTANT |
Introduce std::bool_constant
Equivalent SD-6 macro: __cpp_lib_bool_constant
<type_traits>
#define LBAL_LIBCPP17_BOYER_MOORE_SEARCHER |
Add text search components from Library Fundamentals V1 TS.
Equivalent SD-6 macro: __cpp_lib_boyer_moore_searcher
<functional>
#define LBAL_LIBCPP17_BYTE |
#define LBAL_LIBCPP17_CHRONO |
#define LBAL_LIBCPP17_CHRONO_CONSTEXPR |
#define LBAL_LIBCPP17_CLAMP |
#define LBAL_LIBCPP17_ENABLE_SHARED_FROM_THIS |
Re-enable std::shared_from_this
Equivalent SD-6 macro: __cpp_lib_enable_shared_from_this
std::owner_less
. We reflect the correct proposal here, but the date associated with this token may be incorrect.<memory>
#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.
<execution>
#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.
<filesystem>
#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.
<filesystem>
#define LBAL_LIBCPP17_FILESYSTEM_EXP |
Experimental implementation of the Filesystem TS.
Equivalent SD-6 macro: __cpp_lib_experimental_filesystem
#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.
<filesystem>
#define LBAL_LIBCPP17_GCD_LCM |
#define LBAL_LIBCPP17_HARDWARE_INTERFERENCE_SIZE |
Provide relevant cache line sizes for construction and destruction.
Equivalent SD-6 macro: __cpp_lib_hardware_interference_size
<new>
#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).
<type_traits>
#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.
<cmath>
#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.
<forward_list>
<list>
<vector>
#define LBAL_LIBCPP17_INVOKE |
Add std::invoke
function template.
Equivalent SD-6 macro: __cpp_lib_invoke
<functional>
#define LBAL_LIBCPP17_IS_AGGREGATE |
Add std::is_aggregate
type trait.
Equivalent SD-6 macro: __cpp_lib_is_aggregate
<type_traits>
#define LBAL_LIBCPP17_IS_INVOCABLE |
Add std::is_invocable
type trait to replace is_callable
Equivalent SD-6 macro: __cpp_lib_is_invocable
<type_traits>
#define LBAL_LIBCPP17_IS_SWAPPABLE |
Add std::is_swappable
type trait family.
Equivalent SD-6 macro: __cpp_lib_is_swappable
<type_traits>
#define LBAL_LIBCPP17_LAUNDER |
Replacement of class objects containing reference members.
Equivalent SD-6 macro: __cpp_lib_launder
<new>
#define LBAL_LIBCPP17_LOGICAL_TRAITS |
Provide type traits for performing logical operations.
Equivalent SD-6 macro: __cpp_lib_logical_traits
<type_traits>
#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
<tuple>
#define LBAL_LIBCPP17_MAP_TRY_EMPLACE |
Improve insertion into std::map
Equivalent SD-6 macro: __cpp_lib_map_try_emplace
<map>
#define LBAL_LIBCPP17_MATH_SPECIAL_FUNCTIONS |
Incorporate math functions specified in IS 29124:2010.
Equivalent SD-6 macro: __cpp_lib_math_special_functions
<cmath>
#define LBAL_LIBCPP17_MEMORY_RESOURCE |
Incorporate memory management components from Library Fundamentals V1 TS.
Equivalent SD-6 macro: __cpp_lib_memory_resource
<memory_resource>
#define LBAL_LIBCPP17_NODE_EXTRACT |
Add splicing to associative containers.
Equivalent SD-6 macro: __cpp_lib_node_extract
<map>
<set>
<unordered_map>
<unordered_set>
#define LBAL_LIBCPP17_NONMEMBER_CONTAINER_ACCESS |
Incorporate non-member functions into Standard container class interfaces.
Equivalent SD-6 macro: __cpp_lib_nonmember_container_access
<array>
<deque>
<forward_list>
<iterator>
<list>
<map>
<regex>
<set>
<string>
<unordered_map>
<unordered_set>
<vector>
#define LBAL_LIBCPP17_NOT_FN |
#define LBAL_LIBCPP17_OPTIONAL |
#define LBAL_LIBCPP17_OPTIONAL_GREATER_EQUAL |
#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.
<optional>
#define LBAL_LIBCPP17_PARALLEL_ALGORITHM |
Standardize the Parallelism TS.
Equivalent SD-6 macro: __cpp_lib_parallel_algorithm
<algorithm>
<numeric>
#define LBAL_LIBCPP17_RAW_MEMORY_ALGORITHMS |
Supply tools for raw memory management.
Equivalent SD-6 macro: __cpp_lib_raw_memory_algorithms
<memory>
#define LBAL_LIBCPP17_SAMPLE |
Adopt std::sample
from the Library Fundamentals V1 TS.
Equivalent SD-6 macro: __cpp_lib_sample
<algorithm>
#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
.
std::lock_guard
variadic would break ABI, hence the name change.<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
.
<shared_mutex>
#define LBAL_LIBCPP17_SHARED_PTR_ARRAYS |
Fix std::shared_ptr
support for arrays.
Equivalent SD-6 macro: __cpp_lib_shared_ptr_arrays
<memory>
#define LBAL_LIBCPP17_SHARED_PTR_WEAK_TYPE |
Add shared_ptr::weak_type
Equivalent SD-6 macro: __cpp_lib_shared_ptr_weak_type
<memory>
#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
.
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. #define LBAL_LIBCPP17_STRING_VIEW |
#define LBAL_LIBCPP17_STRING_VIEW_INTERFACE |
#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
.
<charconv>
LBAL_LIBCPP17_TO_CHARS_FP
LBAL_LIBCPP17_TO_CHARS_INTEGER
#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
.
<charconv>
LBAL_LIBCPP17_TO_CHARS
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
.
<charconv>
LBAL_LIBCPP17_TO_CHARS
LBAL_LIBCPP17_TO_CHARS_FP
#define LBAL_LIBCPP17_TRANSPARENT_OPERATORS |
Make std::owner_less
more flexible.
Equivalent SD-6 macro: __cpp_lib_transparent_operators
__cpp_lib_enable_shared_from_this
.<functional>
<memory>
#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
<type_traits>
#define LBAL_LIBCPP17_UNCAUGHT_EXCEPTIONS |
Add std::uncaught_exceptions
Equivalent SD-6 macro: __cpp_lib_uncaught_exceptions
<exception>
#define LBAL_LIBCPP17_UNORDERED_MAP_TRY_EMPLACE |
Improve insertion into std::unordered_map
Equivalent SD-6 macro: __cpp_lib_unordered_map_try_emplace
<unordered_map>
#define LBAL_LIBCPP17_VARIANT |
#define LBAL_LIBCPP17_VOID_T |
Add std::void_t
as a transformation type trait.
Equivalent SD-6 macro: __cpp_lib_void_t
<type_traits>
#define LBAL_LIBCPP20_ARRAY_CONSTEXPR_COMPARISONS |
#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.
<array>
<iterator>
#define LBAL_LIBCPP20_ARRAY_CONSTEXPR_UTILITIES |
#define LBAL_LIBCPP20_ASSUME_ALIGNED |
Provide std::assume_aligned
compiler hint utility function Library.
Equivalent SD-6 macro: __cpp_lib_assume_aligned
<memory>
#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
<atomic>
#define LBAL_LIBCPP20_ATOMIC_FLOAT |
Extend <atomic>
support to floating point types.
Equivalent SD-6 macro: __cpp_lib_atomic_float
<atomic>
#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
<atomic>
#define LBAL_LIBCPP20_ATOMIC_REF |
Allow atomic operations to apply to non-atomic objects.
Equivalent SD-6 macro: __cpp_lib_atomic_ref
<atomic>
#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
<memory>
#define LBAL_LIBCPP20_ATOMIC_VALUE_INITIALIZATION |
Eliminate the surprising value-initialization behavior of std::atomic
Equivalent SD-6 macro: __cpp_lib_atomic_value_initialization
<atomic>
<memory>
#define LBAL_LIBCPP20_ATOMIC_WAIT |
Add atomic wait components of the C++20 Synchronization Library.
Equivalent SD-6 macro: __cpp_lib_atomic_wait
<atomic>
#define LBAL_LIBCPP20_BARRIER |
Add std::barrier
components of the C++20 Synchronization Library.
Equivalent SD-6 macro: __cpp_lib_barrier
<barrier>
#define LBAL_LIBCPP20_BIND_FRONT |
#define LBAL_LIBCPP20_BIND_FRONT_NO_UNWRAP |
#define LBAL_LIBCPP20_BIT_CAST |
Introduce robust casts between bit-compatible types.
Equivalent SD-6 macro: __cpp_lib_bit_cast
<bit>
#define LBAL_LIBCPP20_BITOPS |
Introduce support for hardware-level bit operations.
Equivalent SD-6 macro: __cpp_lib_bitops
<bit>
#define LBAL_LIBCPP20_BOUNDED_ARRAY_TRAITS |
Introduce traits to distinguish between bounded and unbounded arrays.
Equivalent SD-6 macro: __cpp_lib_bounded_array_traits
<type_traits>
#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.
<atomic>
<filesystem>
<istream>
<limits>
<locale>
<ostream>
<string>
<string_view>
#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.
<atomic>
<filesystem>
<istream>
<limits>
<locale>
<ostream>
<string>
<string_view>
#define LBAL_LIBCPP20_CHRONO_CALENDAR |
#define LBAL_LIBCPP20_CHRONO_FIXES |
#define LBAL_LIBCPP20_CONCEPTS |
#define LBAL_LIBCPP20_CONCEPTS_BOOLEAN_TESTABLE |
#define LBAL_LIBCPP20_CONCEPTS_EXP |
Experimental version of Standard Library Concepts.
Equivalent SD-6 macro: __cpp_lib_experimental_concepts
<experimental/concepts>
#define LBAL_LIBCPP20_CONCEPTS_STANDARD_CASE |
#define LBAL_LIBCPP20_CONSTEXPR_ALGORITHMS |
#define LBAL_LIBCPP20_CONSTEXPR_ALGORITHMS_SWAP |
#define LBAL_LIBCPP20_CONSTEXPR_COMPLEX |
Add more constexpr
support to <complex>
Equivalent SD-6 macro: __cpp_lib_constexpr_complex
<complex>
#define LBAL_LIBCPP20_CONSTEXPR_DYNAMIC_ALLOC |
Add constexpr
memory allocators used by dynamic containers.
Equivalent SD-6 macro: __cpp_lib_constexpr_dynamic_alloc
<memory>
#define LBAL_LIBCPP20_CONSTEXPR_FUNCTIONAL |
#define LBAL_LIBCPP20_CONSTEXPR_FUNCTIONAL_INVOKE |
#define LBAL_LIBCPP20_CONSTEXPR_ITERATOR |
Make more of <iterator>
constexpr
Equivalent SD-6 macro: __cpp_lib_constexpr_iterator
<iterator>
#define LBAL_LIBCPP20_CONSTEXPR_MEMORY |
Make std::pointer_traits
constexpr
Equivalent SD-6 macro: __cpp_lib_constexpr_memory
<memory>
#define LBAL_LIBCPP20_CONSTEXPR_NUMERIC |
Make numeric algorithms constexpr
Equivalent SD-6 macro: __cpp_lib_constexpr_numeric
<numeric>
#define LBAL_LIBCPP20_CONSTEXPR_STRING |
Make std::string
constexpr
Equivalent SD-6 macro: __cpp_lib_constexpr_string
<string>
#define LBAL_LIBCPP20_CONSTEXPR_STRING_VIEW |
Make more of <string_view>
constexpr
Equivalent SD-6 macro: __cpp_lib_constexpr_string_view
<string_view>
#define LBAL_LIBCPP20_CONSTEXPR_TUPLE |
Make more of <tuple>
constexpr
Equivalent SD-6 macro: __cpp_lib_constexpr_tuple
<tuple>
#define LBAL_LIBCPP20_CONSTEXPR_UTILITY |
Make more of <tuple>
constexpr
Equivalent SD-6 macro: __cpp_lib_constexpr_utility
<utility>
#define LBAL_LIBCPP20_CONSTEXPR_VECTOR |
Make std::vector
constexpr
Equivalent SD-6 macro: __cpp_lib_constexpr_vector
<vector>
#define LBAL_LIBCPP20_COROUTINE |
#define LBAL_LIBCPP20_COROUTINE_EXP |
#define LBAL_LIBCPP20_DESTROYING_DELETE |
Efficient sized delete
for variable-sized classes.
Equivalent SD-6 macro: __cpp_lib_destroying_delete
<new>
#define LBAL_LIBCPP20_ENDIAN |
#define LBAL_LIBCPP20_ENDIAN_BIT |
#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.
<deque>
<forward_list>
<list>
<map>
<set>
<string>
<unordered_map>
<unordered_set>
<vector>
#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.
<deque>
<forward_list>
<list>
<map>
<set>
<string>
<unordered_map>
<unordered_set>
<vector>
#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.
<execution>
#define LBAL_LIBCPP20_FORMAT |
#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.
LBAL_LIBCPP20_GENERIC_UNORDERED_HASH_LOOKUP
will always evaluate to 0
; it is only here by way of documentation.<unordered_map>
<unordered_set>
#define LBAL_LIBCPP20_GENERIC_UNORDERED_LOOKUP |
Heterogeneous lookup for unordered containers.
Equivalent SD-6 macro: __cpp_lib_generic_unordered_lookup
<unordered_map>
<unordered_set>
#define LBAL_LIBCPP20_INT_POW2 |
#define LBAL_LIBCPP20_INT_POW2_FUNCTION_RENAME |
#define LBAL_LIBCPP20_INTEGER_COMPARISON_FUNCTIONS |
Add Safe integral comparisons.
Equivalent SD-6 macro: __cpp_lib_integer_comparison_functions
<utility>
#define LBAL_LIBCPP20_INTERPOLATE |
Add well-behaved interpolation for numbers and pointers.
Equivalent SD-6 macro: __cpp_lib_interpolate
<cmath>
<numeric>
#define LBAL_LIBCPP20_IS_CONSTANT_EVALUATED |
Add std::is_constant_evaluated
type trait.
Equivalent SD-6 macro: __cpp_lib_is_constant_evaluated
<type_traits>
#define LBAL_LIBCPP20_IS_LAYOUT_COMPATIBLE |
Add std::is_layout_compatible
type trait.
Equivalent SD-6 macro: __cpp_lib_is_layout_compatible
<type_traits>
#define LBAL_LIBCPP20_IS_NOTHROW_CONVERTIBLE |
#define LBAL_LIBCPP20_IS_POINTER_INTERCONVERTIBLE |
Add std::is_pointer_interconvertible
type trait.
Equivalent SD-6 macro: __cpp_lib_is_pointer_interconvertible
<type_traits>
#define LBAL_LIBCPP20_JTHREAD |
#define LBAL_LIBCPP20_JTHREAD_CV |
#define LBAL_LIBCPP20_LATCH |
Incorporate std::latch
from the C++20 Synchronization Library.
Equivalent SD-6 macro: __cpp_lib_latch
<latch>
#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
<forward_list>
<list>
#define LBAL_LIBCPP20_MATH_CONSTANTS |
Add common math constants to the C++ Standard.
Equivalent SD-6 macro: __cpp_lib_math_constants
<numbers>
#define LBAL_LIBCPP20_POLYMORPHIC_ALLOCATOR |
Provide a default template argument for std::polymorphic_allocator
Equivalent SD-6 macro: __cpp_lib_polymorphic_allocator
<memory>
#define LBAL_LIBCPP20_RANGES |
#define LBAL_LIBCPP20_RANGES_INPUT_ADAPTORS |
#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.
<algorithm>
<functional>
<iterator>
<memory>
<ranges>
#define LBAL_LIBCPP20_REMOVE_CVREF |
Add std::remove_cvref
type trait.
Equivalent SD-6 macro: __cpp_lib_remove_cvref
<type_traits>
#define LBAL_LIBCPP20_SEMAPHORE |
Incorporate std::semaphore
from the C++20 Synchronization Library.
Equivalent SD-6 macro: __cpp_lib_semaphore
<semaphore>
#define LBAL_LIBCPP20_SHARED_PTR_ARRAYS |
Extend std::make_shared
to support C-style arrays.
Equivalent SD-6 macro: __cpp_lib_shared_ptr_arrays
<memory>
#define LBAL_LIBCPP20_SHIFT |
Add std::shift_left
and std::shift_right
Equivalent SD-6 macro: __cpp_lib_shared_ptr_arrays
<algorithm>
#define LBAL_LIBCPP20_SMART_PTR_FOR_OVERWRITE |
#define LBAL_LIBCPP20_SOURCE_LOCATION |
Adopt std::source_location
from the Library Fundamentals V3 TS.
Equivalent SD-6 macro: __cpp_lib_source_location
<source_location>
#define LBAL_LIBCPP20_SPAN |
#define LBAL_LIBCPP20_SPAN_FIXED_SIZE |
#define LBAL_LIBCPP20_SPAN_USABILITY |
#define LBAL_LIBCPP20_SSIZE |
Add std::ssize
and fix std::span
’s size
return values.
Equivalent SD-6 macro: __cpp_lib_ssize
<span>
-affecting portions of this will be shifted to the __cpp_lib_span
token.<iterator>
<span>
#define LBAL_LIBCPP20_STARTS_ENDS_WITH |
Add string prefix- and suffix-checking.
Equivalent SD-6 macro: __cpp_lib_starts_ends_with
<string>
<string_view>
#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.
<string>
<string_view>
#define LBAL_LIBCPP20_SYNCBUF |
#define LBAL_LIBCPP20_SYNCBUF_MANIPULATORS |
#define LBAL_LIBCPP20_THREE_WAY_COMPARISON |
#define LBAL_LIBCPP20_THREE_WAY_COMPARISON_LIBRARY |
#define LBAL_LIBCPP20_TO_ADDRESS |
Provide a utility to convert a pointer to a raw pointer.
Equivalent SD-6 macro: __cpp_lib_to_address
<memory>
#define LBAL_LIBCPP20_TO_ARRAY |
Adopt std::to_array
from the Library Fundamentals TS.
Equivalent SD-6 macro: __cpp_lib_to_array
<array>
#define LBAL_LIBCPP20_TYPE_IDENTITY |
Add the std::identity
metafunction.
Equivalent SD-6 macro: __cpp_lib_type_identity
<type_traits>
#define LBAL_LIBCPP20_UNWRAP_REF |
#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.
#define LBAL_LIBCPPTS_NETWORKING |
Equivalent SD-6 macro: __cpp_lib_net
#define LBAL_LIBCPPTS_NETWORKING_EXP |
Equivalent SD-6 macro: __cpp_lib_experimental_net
#define LBAL_LIBCPPTS_NETWORKING_EXTENSIBLE |
Equivalent SD-6 macro: __cpp_lib_net_extensible
#define LBAL_LIBCPPTS_NETWORKING_EXTENSIBLE_EXP |
Equivalent SD-6 macro: __cpp_lib_experimental_net_extensible
#define LBAL_LIBCPPTS_OBSERVER_PTR |
Equivalent SD-6 macro: __cpp_lib_observer_ptr
#define LBAL_LIBCPPTS_OBSERVER_PTR_EXP |
Equivalent SD-6 macro: __cpp_lib_experimental_observer_ptr