[support.limits] # 17 Language support library [[support]](./#support) ## 17.3 Implementation properties [support.limits] ### [17.3.1](#general) General [[support.limits.general]](support.limits.general) [1](#general-1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L527) The headers[](#header:%3climits%3e "17.3.3 Header synopsis [limits.syn]"),[](#header:%3cclimits%3e "17.3.6 Header synopsis [climits.syn]"), and[](#header:%3ccfloat%3e "17.3.7 Header synopsis [cfloat.syn]") supply characteristics ofimplementation-dependent arithmetic types ([[basic.fundamental]](basic.fundamental "6.9.2 Fundamental types"))[.](#general-1.sentence-1) ### [17.3.2](#version.syn) Header synopsis [[version.syn]](version.syn) [1](#version.syn-1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L539) The header supplies implementation-dependent information about the C++ standard library (e.g., version number and release date)[.](#version.syn-1.sentence-1) [2](#version.syn-2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L545) Each of the macros defined in [](#header:%3cversion%3e "17.3.2 Header synopsis [version.syn]") is also defined after inclusion of any member of the set of library headers indicated in the corresponding comment in this synopsis[.](#version.syn-2.sentence-1) [*Note [1](#version.syn-note-1)*: Future revisions of this document might replace the values of these macros with greater values[.](#version.syn-2.sentence-2) — *end note*] #define __cpp_lib_adaptor_iterator_pair_constructor 202106L // also in [](stack.syn#header:%3cstack%3e "23.6.5 Header synopsis [stack.syn]"), [](queue.syn#header:%3cqueue%3e "23.6.2 Header synopsis [queue.syn]")#define __cpp_lib_addressof_constexpr 201603L // freestanding, also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_algorithm_default_value_type 202403L// also in [](algorithm.syn#header:%3calgorithm%3e "26.4 Header synopsis [algorithm.syn]"), [](ranges.syn#header:%3cranges%3e "25.2 Header synopsis [ranges.syn]"), [](string.syn#header:%3cstring%3e "27.4.2 Header synopsis [string.syn]"), [](deque.syn#header:%3cdeque%3e "23.3.4 Header synopsis [deque.syn]"), [](list.syn#header:%3clist%3e "23.3.10 Header synopsis [list.syn]"), [](forward.list.syn#header:%3cforward_list%3e "23.3.6 Header synopsis [forward.list.syn]"), [](vector.syn#header:%3cvector%3e "23.3.12 Header synopsis [vector.syn]")#define __cpp_lib_algorithm_iterator_requirements 202207L// also in [](algorithm.syn#header:%3calgorithm%3e "26.4 Header synopsis [algorithm.syn]"), [](numeric.ops.overview#header:%3cnumeric%3e "26.9 Header synopsis [numeric.ops.overview]"), [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_aligned_accessor 202411L // also in [](mdspan.syn#header:%3cmdspan%3e "23.7.3.2 Header synopsis [mdspan.syn]")#define __cpp_lib_allocate_at_least 202302L // also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_allocator_traits_is_always_equal 201411L// freestanding, also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]"), [](allocator.adaptor.syn#header:%3cscoped_allocator%3e "20.6.1 Header synopsis [allocator.adaptor.syn]"), [](string.syn#header:%3cstring%3e "27.4.2 Header synopsis [string.syn]"), [](deque.syn#header:%3cdeque%3e "23.3.4 Header synopsis [deque.syn]"), [](forward.list.syn#header:%3cforward_list%3e "23.3.6 Header synopsis [forward.list.syn]"), [](list.syn#header:%3clist%3e "23.3.10 Header synopsis [list.syn]"),// [](vector.syn#header:%3cvector%3e "23.3.12 Header synopsis [vector.syn]"), [](associative.map.syn#header:%3cmap%3e "23.4.2 Header synopsis [associative.map.syn]"), [](associative.set.syn#header:%3cset%3e "23.4.5 Header synopsis [associative.set.syn]"), [](unord.map.syn#header:%3cunordered_map%3e "23.5.2 Header synopsis [unord.map.syn]"), [](unord.set.syn#header:%3cunordered_set%3e "23.5.5 Header synopsis [unord.set.syn]")#define __cpp_lib_any 201606L // also in [](any.synop#header:%3cany%3e "22.7.2 Header synopsis [any.synop]")#define __cpp_lib_apply 202506L // freestanding, also in [](tuple.syn#header:%3ctuple%3e "22.4.2 Header synopsis [tuple.syn]"), [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_array_constexpr 201811L // also in [](iterator.synopsis#header:%3citerator%3e "24.2 Header  synopsis [iterator.synopsis]"), [](array.syn#header:%3carray%3e "23.3.2 Header synopsis [array.syn]")#define __cpp_lib_as_const 201510L // freestanding, also in [](utility.syn#header:%3cutility%3e "22.2.1 Header synopsis [utility.syn]")#define __cpp_lib_associative_heterogeneous_erasure 202110L// also in [](associative.map.syn#header:%3cmap%3e "23.4.2 Header synopsis [associative.map.syn]"), [](associative.set.syn#header:%3cset%3e "23.4.5 Header synopsis [associative.set.syn]"), [](unord.map.syn#header:%3cunordered_map%3e "23.5.2 Header synopsis [unord.map.syn]"), [](unord.set.syn#header:%3cunordered_set%3e "23.5.5 Header synopsis [unord.set.syn]")#define __cpp_lib_associative_heterogeneous_insertion 202306L// also in [](associative.map.syn#header:%3cmap%3e "23.4.2 Header synopsis [associative.map.syn]"), [](associative.set.syn#header:%3cset%3e "23.4.5 Header synopsis [associative.set.syn]"), [](unord.map.syn#header:%3cunordered_map%3e "23.5.2 Header synopsis [unord.map.syn]"), [](unord.set.syn#header:%3cunordered_set%3e "23.5.5 Header synopsis [unord.set.syn]")#define __cpp_lib_assume_aligned 201811L // freestanding, also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_atomic_flag_test 201907L // freestanding, also in [](atomics.syn#header:%3catomic%3e "32.5.2 Header synopsis [atomics.syn]")#define __cpp_lib_atomic_float 201711L // freestanding, also in [](atomics.syn#header:%3catomic%3e "32.5.2 Header synopsis [atomics.syn]")#define __cpp_lib_atomic_is_always_lock_free 201603L // freestanding, also in [](atomics.syn#header:%3catomic%3e "32.5.2 Header synopsis [atomics.syn]")#define __cpp_lib_atomic_lock_free_type_aliases 201907L // also in [](atomics.syn#header:%3catomic%3e "32.5.2 Header synopsis [atomics.syn]")#define __cpp_lib_atomic_min_max 202506L // freestanding, also in [](atomics.syn#header:%3catomic%3e "32.5.2 Header synopsis [atomics.syn]")#define __cpp_lib_atomic_reductions 202506L // freestanding, also in [](atomics.syn#header:%3catomic%3e "32.5.2 Header synopsis [atomics.syn]")#define __cpp_lib_atomic_ref 202411L // freestanding, also in [](atomics.syn#header:%3catomic%3e "32.5.2 Header synopsis [atomics.syn]")#define __cpp_lib_atomic_shared_ptr 201711L // also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_atomic_value_initialization 201911L // freestanding, also in [](atomics.syn#header:%3catomic%3e "32.5.2 Header synopsis [atomics.syn]"), [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_atomic_wait 201907L // freestanding, also in [](atomics.syn#header:%3catomic%3e "32.5.2 Header synopsis [atomics.syn]")#define __cpp_lib_barrier 202302L // also in [](barrier.syn#header:%3cbarrier%3e "32.9.3.2 Header synopsis [barrier.syn]")#define __cpp_lib_bind_back 202306L // freestanding, also in [](functional.syn#header:%3cfunctional%3e "22.10.2 Header synopsis [functional.syn]")#define __cpp_lib_bind_front 202306L // freestanding, also in [](functional.syn#header:%3cfunctional%3e "22.10.2 Header synopsis [functional.syn]")#define __cpp_lib_bit_cast 201806L // freestanding, also in [](bit.general#header:%3cbit%3e "22.11.1 General [bit.general]")#define __cpp_lib_bitops 201907L // freestanding, also in [](bit.general#header:%3cbit%3e "22.11.1 General [bit.general]")#define __cpp_lib_bitset 202306L // also in [](bitset.syn#header:%3cbitset%3e "22.9.1 Header synopsis [bitset.syn]")#define __cpp_lib_bool_constant 201505L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_bounded_array_traits 201902L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_boyer_moore_searcher 201603L // also in [](functional.syn#header:%3cfunctional%3e "22.10.2 Header synopsis [functional.syn]")#define __cpp_lib_byte 201603L // freestanding, also in [](cstddef.syn#header:%3ccstddef%3e "17.2.1 Header synopsis [cstddef.syn]")#define __cpp_lib_byteswap 202110L // freestanding, also in [](bit.general#header:%3cbit%3e "22.11.1 General [bit.general]")#define __cpp_lib_char8_t 201907L// freestanding, also in [](atomics.syn#header:%3catomic%3e "32.5.2 Header synopsis [atomics.syn]"), [](fs.filesystem.syn#header:%3cfilesystem%3e "31.12.4 Header synopsis [fs.filesystem.syn]"), [](istream.syn#header:%3cistream%3e "31.7.1 Header synopsis [istream.syn]"), [](#header:%3climits%3e "17.3.3 Header synopsis [limits.syn]"), [](locale.syn#header:%3clocale%3e "28.3.2 Header synopsis [locale.syn]"), [](ostream.syn#header:%3costream%3e "31.7.2 Header synopsis [ostream.syn]"), [](string.syn#header:%3cstring%3e "27.4.2 Header synopsis [string.syn]"),// [](string.view.synop#header:%3cstring_view%3e "27.3.2 Header synopsis [string.view.synop]")#define __cpp_lib_chrono 202306L // also in [](time.syn#header:%3cchrono%3e "30.2 Header synopsis [time.syn]")#define __cpp_lib_chrono_udls 201304L // also in [](time.syn#header:%3cchrono%3e "30.2 Header synopsis [time.syn]")#define __cpp_lib_clamp 201603L // also in [](algorithm.syn#header:%3calgorithm%3e "26.4 Header synopsis [algorithm.syn]")#define __cpp_lib_common_reference 202302L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_common_reference_wrapper 202302L // freestanding, also in [](functional.syn#header:%3cfunctional%3e "22.10.2 Header synopsis [functional.syn]")#define __cpp_lib_complex_udls 201309L // also in [](complex.syn#header:%3ccomplex%3e "29.4.2 Header synopsis [complex.syn]")#define __cpp_lib_concepts 202207L// freestanding, also in [](concepts.syn#header:%3cconcepts%3e "18.3 Header synopsis [concepts.syn]"), [](compare.syn#header:%3ccompare%3e "17.12.1 Header synopsis [compare.syn]")#define __cpp_lib_constant_wrapper 202506L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_constexpr_algorithms 202306L // also in [](algorithm.syn#header:%3calgorithm%3e "26.4 Header synopsis [algorithm.syn]"), [](utility.syn#header:%3cutility%3e "22.2.1 Header synopsis [utility.syn]")#define __cpp_lib_constexpr_atomic 202411L // also in [](atomics.syn#header:%3catomic%3e "32.5.2 Header synopsis [atomics.syn]")#define __cpp_lib_constexpr_bitset 202207L // also in [](bitset.syn#header:%3cbitset%3e "22.9.1 Header synopsis [bitset.syn]")#define __cpp_lib_constexpr_charconv 202207L // freestanding, also in [](charconv.syn#header:%3ccharconv%3e "28.2.1 Header synopsis [charconv.syn]")#define __cpp_lib_constexpr_cmath 202306L // also in [](cmath.syn#header:%3ccmath%3e "29.7.1 Header synopsis [cmath.syn]"), [](cstdlib.syn#header:%3ccstdlib%3e "17.2.2 Header synopsis [cstdlib.syn]")#define __cpp_lib_constexpr_complex 202306L // also in [](complex.syn#header:%3ccomplex%3e "29.4.2 Header synopsis [complex.syn]")#define __cpp_lib_constexpr_deque 202502L // also in [](deque.syn#header:%3cdeque%3e "23.3.4 Header synopsis [deque.syn]")#define __cpp_lib_constexpr_dynamic_alloc 201907L // also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_constexpr_exceptions 202502L// also in [](support.exception.general#header:%3cexception%3e "17.9.1 General [support.exception.general]"), [](std.exceptions.general#header:%3cstdexcept%3e "19.2.1 General [std.exceptions.general]"), [](expected.syn#header:%3cexpected%3e "22.8.2 Header synopsis [expected.syn]"), [](optional.syn#header:%3coptional%3e "22.5.2 Header synopsis [optional.syn]"), [](variant.syn#header:%3cvariant%3e "22.6.2 Header synopsis [variant.syn]"), and [](format.formatter.spec#header:%3cformat%3e "28.5.6.4 Formatter specializations [format.formatter.spec]")#define __cpp_lib_constexpr_flat_map 202502L // also in [](flat.map.syn#header:%3cflat_map%3e "23.6.7 Header synopsis [flat.map.syn]")#define __cpp_lib_constexpr_flat_set 202502L // also in [](flat.set.syn#header:%3cflat_set%3e "23.6.10 Header synopsis [flat.set.syn]")#define __cpp_lib_constexpr_forward_list 202502L // also in [](forward.list.syn#header:%3cforward_list%3e "23.3.6 Header synopsis [forward.list.syn]")#define __cpp_lib_constexpr_functional 201907L // freestanding, also in [](functional.syn#header:%3cfunctional%3e "22.10.2 Header synopsis [functional.syn]")#define __cpp_lib_constexpr_inplace_vector 202502L // also in [](inplace.vector.syn#header:%3cinplace_vector%3e "23.3.15 Header synopsis [inplace.vector.syn]")#define __cpp_lib_constexpr_iterator 201811L // freestanding, also in [](iterator.synopsis#header:%3citerator%3e "24.2 Header  synopsis [iterator.synopsis]")#define __cpp_lib_constexpr_list 202502L // also in [](list.syn#header:%3clist%3e "23.3.10 Header synopsis [list.syn]")#define __cpp_lib_constexpr_map 202502L // also in [](associative.map.syn#header:%3cmap%3e "23.4.2 Header synopsis [associative.map.syn]")#define __cpp_lib_constexpr_memory 202506L // freestanding, also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_constexpr_new 202406L // freestanding, also in [](support.dynamic.general#header:%3cnew%3e "17.6.1 General [support.dynamic.general]")#define __cpp_lib_constexpr_numeric 201911L // also in [](numeric.ops.overview#header:%3cnumeric%3e "26.9 Header synopsis [numeric.ops.overview]")#define __cpp_lib_constexpr_queue 202502L // also in [](queue.syn#header:%3cqueue%3e "23.6.2 Header synopsis [queue.syn]")#define __cpp_lib_constexpr_set 202502L // also in [](associative.set.syn#header:%3cset%3e "23.4.5 Header synopsis [associative.set.syn]")#define __cpp_lib_constexpr_stack 202502L // also in [](stack.syn#header:%3cstack%3e "23.6.5 Header synopsis [stack.syn]")#define __cpp_lib_constexpr_string 201907L // also in [](string.syn#header:%3cstring%3e "27.4.2 Header synopsis [string.syn]")#define __cpp_lib_constexpr_string_view 201811L // also in [](string.view.synop#header:%3cstring_view%3e "27.3.2 Header synopsis [string.view.synop]")#define __cpp_lib_constexpr_tuple 201811L // freestanding, also in [](tuple.syn#header:%3ctuple%3e "22.4.2 Header synopsis [tuple.syn]")#define __cpp_lib_constexpr_typeinfo 202106L // freestanding, also in [](typeinfo.syn#header:%3ctypeinfo%3e "17.7.2 Header synopsis [typeinfo.syn]")#define __cpp_lib_constexpr_unordered_map 202502L // also in [](unord.map.syn#header:%3cunordered_map%3e "23.5.2 Header synopsis [unord.map.syn]")#define __cpp_lib_constexpr_unordered_set 202502L // also in [](unord.set.syn#header:%3cunordered_set%3e "23.5.5 Header synopsis [unord.set.syn]")#define __cpp_lib_constexpr_utility 201811L // freestanding, also in [](utility.syn#header:%3cutility%3e "22.2.1 Header synopsis [utility.syn]")#define __cpp_lib_constexpr_vector 201907L // also in [](vector.syn#header:%3cvector%3e "23.3.12 Header synopsis [vector.syn]")#define __cpp_lib_constrained_equality 202411L // freestanding,// also in [](utility.syn#header:%3cutility%3e "22.2.1 Header synopsis [utility.syn]"), [](tuple.syn#header:%3ctuple%3e "22.4.2 Header synopsis [tuple.syn]"), [](optional.syn#header:%3coptional%3e "22.5.2 Header synopsis [optional.syn]"), [](variant.syn#header:%3cvariant%3e "22.6.2 Header synopsis [variant.syn]"), [](expected.syn#header:%3cexpected%3e "22.8.2 Header synopsis [expected.syn]")#define __cpp_lib_containers_ranges 202202L// also in [](vector.syn#header:%3cvector%3e "23.3.12 Header synopsis [vector.syn]"), [](list.syn#header:%3clist%3e "23.3.10 Header synopsis [list.syn]"), [](forward.list.syn#header:%3cforward_list%3e "23.3.6 Header synopsis [forward.list.syn]"), [](associative.map.syn#header:%3cmap%3e "23.4.2 Header synopsis [associative.map.syn]"), [](associative.set.syn#header:%3cset%3e "23.4.5 Header synopsis [associative.set.syn]"), [](unord.map.syn#header:%3cunordered_map%3e "23.5.2 Header synopsis [unord.map.syn]"), [](unord.set.syn#header:%3cunordered_set%3e "23.5.5 Header synopsis [unord.set.syn]"),// [](deque.syn#header:%3cdeque%3e "23.3.4 Header synopsis [deque.syn]"), [](queue.syn#header:%3cqueue%3e "23.6.2 Header synopsis [queue.syn]"), [](stack.syn#header:%3cstack%3e "23.6.5 Header synopsis [stack.syn]"), [](string.syn#header:%3cstring%3e "27.4.2 Header synopsis [string.syn]")#define __cpp_lib_contracts 202502L // freestanding, also in [](contracts.syn#header:%3ccontracts%3e "17.10.1 Header synopsis [contracts.syn]")#define __cpp_lib_copyable_function 202306L // also in [](functional.syn#header:%3cfunctional%3e "22.10.2 Header synopsis [functional.syn]")#define __cpp_lib_coroutine 201902L // freestanding, also in [](coroutine.syn#header:%3ccoroutine%3e "17.13.2 Header synopsis [coroutine.syn]")#define __cpp_lib_counting_scope 202506L // also in [](execution.syn#header:%3cexecution%3e "33.4 Header synopsis [execution.syn]")#define __cpp_lib_debugging 202403L // freestanding, also in [](debugging.syn#header:%3cdebugging%3e "19.7.2 Header synopsis [debugging.syn]")#define __cpp_lib_define_static 202506L // freestanding, also in [](meta.syn#header:%3cmeta%3e "21.4.1 Header synopsis [meta.syn]")#define __cpp_lib_destroying_delete 201806L // freestanding, also in [](support.dynamic.general#header:%3cnew%3e "17.6.1 General [support.dynamic.general]")#define __cpp_lib_enable_shared_from_this 201603L // also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_endian 201907L // freestanding, also in [](bit.general#header:%3cbit%3e "22.11.1 General [bit.general]")#define __cpp_lib_erase_if 202002L// also in [](string.syn#header:%3cstring%3e "27.4.2 Header synopsis [string.syn]"), [](deque.syn#header:%3cdeque%3e "23.3.4 Header synopsis [deque.syn]"), [](forward.list.syn#header:%3cforward_list%3e "23.3.6 Header synopsis [forward.list.syn]"), [](list.syn#header:%3clist%3e "23.3.10 Header synopsis [list.syn]"), [](vector.syn#header:%3cvector%3e "23.3.12 Header synopsis [vector.syn]"), [](associative.map.syn#header:%3cmap%3e "23.4.2 Header synopsis [associative.map.syn]"), [](associative.set.syn#header:%3cset%3e "23.4.5 Header synopsis [associative.set.syn]"), [](unord.map.syn#header:%3cunordered_map%3e "23.5.2 Header synopsis [unord.map.syn]"),// [](unord.set.syn#header:%3cunordered_set%3e "23.5.5 Header synopsis [unord.set.syn]")#define __cpp_lib_exception_ptr_cast 202506L // also in [](support.exception.general#header:%3cexception%3e "17.9.1 General [support.exception.general]")#define __cpp_lib_exchange_function 201304L // freestanding, also in [](utility.syn#header:%3cutility%3e "22.2.1 Header synopsis [utility.syn]")#define __cpp_lib_execution 201902L // also in [](execution.syn#header:%3cexecution%3e "33.4 Header synopsis [execution.syn]")#define __cpp_lib_expected 202211L // also in [](expected.syn#header:%3cexpected%3e "22.8.2 Header synopsis [expected.syn]")#define __cpp_lib_filesystem 201703L // also in [](fs.filesystem.syn#header:%3cfilesystem%3e "31.12.4 Header synopsis [fs.filesystem.syn]")#define __cpp_lib_flat_map 202207L // also in [](flat.map.syn#header:%3cflat_map%3e "23.6.7 Header synopsis [flat.map.syn]")#define __cpp_lib_flat_set 202207L // also in [](flat.set.syn#header:%3cflat_set%3e "23.6.10 Header synopsis [flat.set.syn]")#define __cpp_lib_format 202311L // also in [](format.formatter.spec#header:%3cformat%3e "28.5.6.4 Formatter specializations [format.formatter.spec]")#define __cpp_lib_format_ranges 202207L // also in [](format.formatter.spec#header:%3cformat%3e "28.5.6.4 Formatter specializations [format.formatter.spec]")#define __cpp_lib_format_path 202506L // also in [](fs.filesystem.syn#header:%3cfilesystem%3e "31.12.4 Header synopsis [fs.filesystem.syn]")#define __cpp_lib_format_uchar 202311L // also in [](format.formatter.spec#header:%3cformat%3e "28.5.6.4 Formatter specializations [format.formatter.spec]")#define __cpp_lib_formatters 202302L // also in [](stacktrace.syn#header:%3cstacktrace%3e "19.6.2 Header synopsis [stacktrace.syn]"), [](thread.syn#header:%3cthread%3e "32.4.2 Header synopsis [thread.syn]")#define __cpp_lib_forward_like 202207L // freestanding, also in [](utility.syn#header:%3cutility%3e "22.2.1 Header synopsis [utility.syn]")#define __cpp_lib_freestanding_algorithm 202502L // freestanding, also in [](algorithm.syn#header:%3calgorithm%3e "26.4 Header synopsis [algorithm.syn]")#define __cpp_lib_freestanding_array 202311L // freestanding, also in [](array.syn#header:%3carray%3e "23.3.2 Header synopsis [array.syn]")#define __cpp_lib_freestanding_char_traits 202306L // freestanding, also in [](string.syn#header:%3cstring%3e "27.4.2 Header synopsis [string.syn]")#define __cpp_lib_freestanding_charconv 202306L // freestanding, also in [](charconv.syn#header:%3ccharconv%3e "28.2.1 Header synopsis [charconv.syn]")#define __cpp_lib_freestanding_cstdlib 202306L // freestanding, also in [](cstdlib.syn#header:%3ccstdlib%3e "17.2.2 Header synopsis [cstdlib.syn]"), [](cmath.syn#header:%3ccmath%3e "29.7.1 Header synopsis [cmath.syn]")#define __cpp_lib_freestanding_cstring 202311L // freestanding, also in [](cstring.syn#header:%3ccstring%3e "27.5.1 Header synopsis [cstring.syn]")#define __cpp_lib_freestanding_cwchar 202306L // freestanding, also in [](cwchar.syn#header:%3ccwchar%3e "28.7.3 Header synopsis [cwchar.syn]")#define __cpp_lib_freestanding_errc 202306L// freestanding, also in [](errno.general#header:%3ccerrno%3e "19.4.1 General [errno.general]"), [](system.error.syn#header:%3csystem_error%3e "19.5.2 Header synopsis [system.error.syn]")#define __cpp_lib_freestanding_execution 202502L // freestanding, also in [](execution.syn#header:%3cexecution%3e "33.4 Header synopsis [execution.syn]")#define __cpp_lib_freestanding_expected 202311L // freestanding, also in [](expected.syn#header:%3cexpected%3e "22.8.2 Header synopsis [expected.syn]")#define __cpp_lib_freestanding_feature_test_macros 202306L // freestanding#define __cpp_lib_freestanding_functional 202306L // freestanding, also in [](functional.syn#header:%3cfunctional%3e "22.10.2 Header synopsis [functional.syn]")#define __cpp_lib_freestanding_iterator 202306L // freestanding, also in [](iterator.synopsis#header:%3citerator%3e "24.2 Header  synopsis [iterator.synopsis]")#define __cpp_lib_freestanding_mdspan 202311L // freestanding, also in [](mdspan.syn#header:%3cmdspan%3e "23.7.3.2 Header synopsis [mdspan.syn]")#define __cpp_lib_freestanding_memory 202502L // freestanding, also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_freestanding_numeric 202502L // freestanding, also in [](numeric.ops.overview#header:%3cnumeric%3e "26.9 Header synopsis [numeric.ops.overview]")#define __cpp_lib_freestanding_operator_new *see below* // freestanding, also in [](support.dynamic.general#header:%3cnew%3e "17.6.1 General [support.dynamic.general]")#define __cpp_lib_freestanding_optional 202506L // freestanding, also in [](optional.syn#header:%3coptional%3e "22.5.2 Header synopsis [optional.syn]")#define __cpp_lib_freestanding_random 202502L // freestanding, also in [](rand.synopsis#header:%3crandom%3e "29.5.2 Header synopsis [rand.synopsis]")#define __cpp_lib_freestanding_ranges 202306L // freestanding, also in [](ranges.syn#header:%3cranges%3e "25.2 Header synopsis [ranges.syn]")#define __cpp_lib_freestanding_ratio 202306L // freestanding, also in [](ratio.syn#header:%3cratio%3e "21.5.2 Header synopsis [ratio.syn]")#define __cpp_lib_freestanding_string_view 202311L // freestanding, also in [](string.view.synop#header:%3cstring_view%3e "27.3.2 Header synopsis [string.view.synop]")#define __cpp_lib_freestanding_tuple 202306L // freestanding, also in [](tuple.syn#header:%3ctuple%3e "22.4.2 Header synopsis [tuple.syn]")#define __cpp_lib_freestanding_utility 202306L // freestanding, also in [](utility.syn#header:%3cutility%3e "22.2.1 Header synopsis [utility.syn]")#define __cpp_lib_freestanding_variant 202311L // freestanding, also in [](variant.syn#header:%3cvariant%3e "22.6.2 Header synopsis [variant.syn]")#define __cpp_lib_fstream_native_handle 202306L // also in [](fstream.syn#header:%3cfstream%3e "31.10.1 Header synopsis [fstream.syn]")#define __cpp_lib_function_ref 202306L // also in [](functional.syn#header:%3cfunctional%3e "22.10.2 Header synopsis [functional.syn]")#define __cpp_lib_gcd_lcm 201606L // also in [](numeric.ops.overview#header:%3cnumeric%3e "26.9 Header synopsis [numeric.ops.overview]")#define __cpp_lib_generator 202207L // also in [](generator.syn#header:%3cgenerator%3e "25.8.2 Header synopsis [generator.syn]")#define __cpp_lib_generic_associative_lookup 201304L // also in [](associative.map.syn#header:%3cmap%3e "23.4.2 Header synopsis [associative.map.syn]"), [](associative.set.syn#header:%3cset%3e "23.4.5 Header synopsis [associative.set.syn]")#define __cpp_lib_generic_unordered_lookup 201811L// also in [](unord.map.syn#header:%3cunordered_map%3e "23.5.2 Header synopsis [unord.map.syn]"), [](unord.set.syn#header:%3cunordered_set%3e "23.5.5 Header synopsis [unord.set.syn]")#define __cpp_lib_hardware_interference_size 201703L // freestanding, also in [](support.dynamic.general#header:%3cnew%3e "17.6.1 General [support.dynamic.general]")#define __cpp_lib_has_unique_object_representations 201606L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_hazard_pointer 202306L // also in [](hazard.pointer.syn#header:%3chazard_pointer%3e "32.11.3.2 Header synopsis [hazard.pointer.syn]")#define __cpp_lib_hive 202502L // also in [](hive.syn#header:%3chive%3e "23.3.8 Header synopsis [hive.syn]")#define __cpp_lib_hypot 201603L // also in [](cmath.syn#header:%3ccmath%3e "29.7.1 Header synopsis [cmath.syn]")#define __cpp_lib_incomplete_container_elements 201505L// also in [](forward.list.syn#header:%3cforward_list%3e "23.3.6 Header synopsis [forward.list.syn]"), [](list.syn#header:%3clist%3e "23.3.10 Header synopsis [list.syn]"), [](vector.syn#header:%3cvector%3e "23.3.12 Header synopsis [vector.syn]")#define __cpp_lib_indirect 202502L // also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_inplace_vector 202406L // also in [](inplace.vector.syn#header:%3cinplace_vector%3e "23.3.15 Header synopsis [inplace.vector.syn]")#define __cpp_lib_int_pow2 202002L // freestanding, also in [](bit.general#header:%3cbit%3e "22.11.1 General [bit.general]")#define __cpp_lib_integer_comparison_functions 202002L // also in [](utility.syn#header:%3cutility%3e "22.2.1 Header synopsis [utility.syn]")#define __cpp_lib_integer_sequence 201304L // freestanding, also in [](utility.syn#header:%3cutility%3e "22.2.1 Header synopsis [utility.syn]")#define __cpp_lib_integral_constant_callable 201304L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_interpolate 201902L // also in [](cmath.syn#header:%3ccmath%3e "29.7.1 Header synopsis [cmath.syn]"), [](numeric.ops.overview#header:%3cnumeric%3e "26.9 Header synopsis [numeric.ops.overview]")#define __cpp_lib_invoke 201411L // freestanding, also in [](functional.syn#header:%3cfunctional%3e "22.10.2 Header synopsis [functional.syn]")#define __cpp_lib_invoke_r 202106L // freestanding, also in [](functional.syn#header:%3cfunctional%3e "22.10.2 Header synopsis [functional.syn]")#define __cpp_lib_ios_noreplace 202207L // also in [](ios.syn#header:%3cios%3e "31.5.1 Header synopsis [ios.syn]")#define __cpp_lib_is_aggregate 201703L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_is_constant_evaluated 201811L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_is_final 201402L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_is_implicit_lifetime 202302L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_is_invocable 201703L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_is_layout_compatible 201907L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_is_nothrow_convertible 201806L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_is_null_pointer 201309L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_is_pointer_interconvertible 201907L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_is_scoped_enum 202011L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_is_sufficiently_aligned 202411L // also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_is_swappable 201603L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_is_virtual_base_of 202406L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_is_within_lifetime 202306L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_jthread 201911L // also in [](thread.stoptoken.syn#header:%3cstop_token%3e "32.3.2 Header synopsis [thread.stoptoken.syn]"), [](thread.syn#header:%3cthread%3e "32.4.2 Header synopsis [thread.syn]")#define __cpp_lib_latch 201907L // also in [](latch.syn#header:%3clatch%3e "32.9.2.2 Header synopsis [latch.syn]")#define __cpp_lib_launder 201606L // freestanding, also in [](support.dynamic.general#header:%3cnew%3e "17.6.1 General [support.dynamic.general]")#define __cpp_lib_linalg 202412L // also in [](linalg.syn#header:%3clinalg%3e "29.9.2 Header synopsis [linalg.syn]")#define __cpp_lib_list_remove_return_type 201806L // also in [](forward.list.syn#header:%3cforward_list%3e "23.3.6 Header synopsis [forward.list.syn]"), [](list.syn#header:%3clist%3e "23.3.10 Header synopsis [list.syn]")#define __cpp_lib_logical_traits 201510L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_make_from_tuple 201606L // freestanding, also in [](tuple.syn#header:%3ctuple%3e "22.4.2 Header synopsis [tuple.syn]")#define __cpp_lib_make_reverse_iterator 201402L // freestanding, also in [](iterator.synopsis#header:%3citerator%3e "24.2 Header  synopsis [iterator.synopsis]")#define __cpp_lib_make_unique 201304L // also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_map_try_emplace 201411L // also in [](associative.map.syn#header:%3cmap%3e "23.4.2 Header synopsis [associative.map.syn]")#define __cpp_lib_math_constants 201907L // also in [](numbers.syn#header:%3cnumbers%3e "29.8.1 Header synopsis [numbers.syn]")#define __cpp_lib_math_special_functions 201603L // also in [](cmath.syn#header:%3ccmath%3e "29.7.1 Header synopsis [cmath.syn]")#define __cpp_lib_mdspan 202406L // freestanding, also in [](mdspan.syn#header:%3cmdspan%3e "23.7.3.2 Header synopsis [mdspan.syn]")#define __cpp_lib_memory_resource 201603L // also in [](mem.res.syn#header:%3cmemory_resource%3e "20.5.1 Header synopsis [mem.res.syn]")#define __cpp_lib_modules 202207L // freestanding#define __cpp_lib_move_iterator_concept 202207L // freestanding, also in [](iterator.synopsis#header:%3citerator%3e "24.2 Header  synopsis [iterator.synopsis]")#define __cpp_lib_move_only_function 202110L // also in [](functional.syn#header:%3cfunctional%3e "22.10.2 Header synopsis [functional.syn]")#define __cpp_lib_node_extract 201606L// also in [](associative.map.syn#header:%3cmap%3e "23.4.2 Header synopsis [associative.map.syn]"), [](associative.set.syn#header:%3cset%3e "23.4.5 Header synopsis [associative.set.syn]"), [](unord.map.syn#header:%3cunordered_map%3e "23.5.2 Header synopsis [unord.map.syn]"), [](unord.set.syn#header:%3cunordered_set%3e "23.5.5 Header synopsis [unord.set.syn]")#define __cpp_lib_nonmember_container_access 201411L// freestanding, also in [](array.syn#header:%3carray%3e "23.3.2 Header synopsis [array.syn]"), [](deque.syn#header:%3cdeque%3e "23.3.4 Header synopsis [deque.syn]"), [](forward.list.syn#header:%3cforward_list%3e "23.3.6 Header synopsis [forward.list.syn]"), [](iterator.synopsis#header:%3citerator%3e "24.2 Header  synopsis [iterator.synopsis]"), [](list.syn#header:%3clist%3e "23.3.10 Header synopsis [list.syn]"), [](associative.map.syn#header:%3cmap%3e "23.4.2 Header synopsis [associative.map.syn]"), [](re.syn#header:%3cregex%3e "28.6.3 Header synopsis [re.syn]"), [](associative.set.syn#header:%3cset%3e "23.4.5 Header synopsis [associative.set.syn]"),// [](string.syn#header:%3cstring%3e "27.4.2 Header synopsis [string.syn]"), [](unord.map.syn#header:%3cunordered_map%3e "23.5.2 Header synopsis [unord.map.syn]"), [](unord.set.syn#header:%3cunordered_set%3e "23.5.5 Header synopsis [unord.set.syn]"), [](vector.syn#header:%3cvector%3e "23.3.12 Header synopsis [vector.syn]")#define __cpp_lib_not_fn 202306L // freestanding, also in [](functional.syn#header:%3cfunctional%3e "22.10.2 Header synopsis [functional.syn]")#define __cpp_lib_null_iterators 201304L // freestanding, also in [](iterator.synopsis#header:%3citerator%3e "24.2 Header  synopsis [iterator.synopsis]")#define __cpp_lib_observable_checkpoint 202506L // freestanding, also in [](utility.syn#header:%3cutility%3e "22.2.1 Header synopsis [utility.syn]")#define __cpp_lib_optional 202506L // also in [](optional.syn#header:%3coptional%3e "22.5.2 Header synopsis [optional.syn]")#define __cpp_lib_optional_range_support 202406L // freestanding, also in [](optional.syn#header:%3coptional%3e "22.5.2 Header synopsis [optional.syn]")#define __cpp_lib_out_ptr 202311L // freestanding, also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_parallel_algorithm 202506L// also in [](algorithm.syn#header:%3calgorithm%3e "26.4 Header synopsis [algorithm.syn]"), [](numeric.ops.overview#header:%3cnumeric%3e "26.9 Header synopsis [numeric.ops.overview]"), [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_parallel_scheduler 202506L // also in [](execution.syn#header:%3cexecution%3e "33.4 Header synopsis [execution.syn]")#define __cpp_lib_philox_engine 202406L // also in [](rand.synopsis#header:%3crandom%3e "29.5.2 Header synopsis [rand.synopsis]")#define __cpp_lib_polymorphic 202502L // also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_polymorphic_allocator 201902L // also in [](mem.res.syn#header:%3cmemory_resource%3e "20.5.1 Header synopsis [mem.res.syn]")#define __cpp_lib_print 202406L // also in [](print.syn#header:%3cprint%3e "31.7.4 Header synopsis [print.syn]"), [](ostream.syn#header:%3costream%3e "31.7.2 Header synopsis [ostream.syn]")#define __cpp_lib_quoted_string_io 201304L // also in [](iomanip.syn#header:%3ciomanip%3e "31.7.3 Header synopsis [iomanip.syn]")#define __cpp_lib_ranges 202406L// also in [](algorithm.syn#header:%3calgorithm%3e "26.4 Header synopsis [algorithm.syn]"), [](functional.syn#header:%3cfunctional%3e "22.10.2 Header synopsis [functional.syn]"), [](iterator.synopsis#header:%3citerator%3e "24.2 Header  synopsis [iterator.synopsis]"), [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]"), [](ranges.syn#header:%3cranges%3e "25.2 Header synopsis [ranges.syn]")#define __cpp_lib_ranges_as_const 202311L // freestanding, also in [](ranges.syn#header:%3cranges%3e "25.2 Header synopsis [ranges.syn]")#define __cpp_lib_ranges_as_rvalue 202207L // freestanding, also in [](ranges.syn#header:%3cranges%3e "25.2 Header synopsis [ranges.syn]")#define __cpp_lib_ranges_cache_latest 202411L // freestanding, also in [](ranges.syn#header:%3cranges%3e "25.2 Header synopsis [ranges.syn]")#define __cpp_lib_ranges_cartesian_product 202207L // freestanding, also in [](ranges.syn#header:%3cranges%3e "25.2 Header synopsis [ranges.syn]")#define __cpp_lib_ranges_chunk 202202L // freestanding, also in [](ranges.syn#header:%3cranges%3e "25.2 Header synopsis [ranges.syn]")#define __cpp_lib_ranges_chunk_by 202202L // freestanding, also in [](ranges.syn#header:%3cranges%3e "25.2 Header synopsis [ranges.syn]")#define __cpp_lib_ranges_concat 202403L // freestanding, also in [](ranges.syn#header:%3cranges%3e "25.2 Header synopsis [ranges.syn]")#define __cpp_lib_ranges_contains 202207L // also in [](algorithm.syn#header:%3calgorithm%3e "26.4 Header synopsis [algorithm.syn]")#define __cpp_lib_ranges_enumerate 202302L // also in [](ranges.syn#header:%3cranges%3e "25.2 Header synopsis [ranges.syn]")#define __cpp_lib_ranges_find_last 202207L // also in [](algorithm.syn#header:%3calgorithm%3e "26.4 Header synopsis [algorithm.syn]")#define __cpp_lib_ranges_fold 202207L // also in [](algorithm.syn#header:%3calgorithm%3e "26.4 Header synopsis [algorithm.syn]")#define __cpp_lib_ranges_generate_random 202403L // also in [](rand.synopsis#header:%3crandom%3e "29.5.2 Header synopsis [rand.synopsis]")#define __cpp_lib_ranges_indices 202506L // also in [](ranges.syn#header:%3cranges%3e "25.2 Header synopsis [ranges.syn]")#define __cpp_lib_ranges_iota 202202L // also in [](numeric.ops.overview#header:%3cnumeric%3e "26.9 Header synopsis [numeric.ops.overview]")#define __cpp_lib_ranges_join_with 202202L // freestanding, also in [](ranges.syn#header:%3cranges%3e "25.2 Header synopsis [ranges.syn]")#define __cpp_lib_ranges_repeat 202207L // freestanding, also in [](ranges.syn#header:%3cranges%3e "25.2 Header synopsis [ranges.syn]")#define __cpp_lib_ranges_reserve_hint 202502L // also in [](ranges.syn#header:%3cranges%3e "25.2 Header synopsis [ranges.syn]")#define __cpp_lib_ranges_slide 202202L // freestanding, also in [](ranges.syn#header:%3cranges%3e "25.2 Header synopsis [ranges.syn]")#define __cpp_lib_ranges_starts_ends_with 202106L // also in [](algorithm.syn#header:%3calgorithm%3e "26.4 Header synopsis [algorithm.syn]")#define __cpp_lib_ranges_stride 202207L // freestanding, also in [](ranges.syn#header:%3cranges%3e "25.2 Header synopsis [ranges.syn]")#define __cpp_lib_ranges_to_container 202202L // freestanding, also in [](ranges.syn#header:%3cranges%3e "25.2 Header synopsis [ranges.syn]")#define __cpp_lib_ranges_to_input 202502L // freestanding, also in [](ranges.syn#header:%3cranges%3e "25.2 Header synopsis [ranges.syn]")#define __cpp_lib_ranges_zip 202110L// freestanding, also in [](ranges.syn#header:%3cranges%3e "25.2 Header synopsis [ranges.syn]"), [](tuple.syn#header:%3ctuple%3e "22.4.2 Header synopsis [tuple.syn]"), [](utility.syn#header:%3cutility%3e "22.2.1 Header synopsis [utility.syn]")#define __cpp_lib_ratio 202306L // freestanding, also in [](ratio.syn#header:%3cratio%3e "21.5.2 Header synopsis [ratio.syn]")#define __cpp_lib_raw_memory_algorithms 202411L // also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_rcu 202306L // also in [](rcu.syn#header:%3crcu%3e "32.11.2.2 Header synopsis [rcu.syn]")#define __cpp_lib_reference_from_temporary 202202L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_reference_wrapper 202403L // freestanding, also in [](functional.syn#header:%3cfunctional%3e "22.10.2 Header synopsis [functional.syn]")#define __cpp_lib_reflection 202506L // also in [](meta.syn#header:%3cmeta%3e "21.4.1 Header synopsis [meta.syn]")#define __cpp_lib_remove_cvref 201711L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_result_of_sfinae 201210L// freestanding, also in [](functional.syn#header:%3cfunctional%3e "22.10.2 Header synopsis [functional.syn]"), [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_robust_nonmodifying_seq_ops 201304L // also in [](algorithm.syn#header:%3calgorithm%3e "26.4 Header synopsis [algorithm.syn]")#define __cpp_lib_sample 201603L // also in [](algorithm.syn#header:%3calgorithm%3e "26.4 Header synopsis [algorithm.syn]")#define __cpp_lib_saturation_arithmetic 202311L // also in [](numeric.ops.overview#header:%3cnumeric%3e "26.9 Header synopsis [numeric.ops.overview]")#define __cpp_lib_scoped_lock 201703L // also in [](mutex.syn#header:%3cmutex%3e "32.6.2 Header synopsis [mutex.syn]")#define __cpp_lib_semaphore 201907L // also in [](semaphore.syn#header:%3csemaphore%3e "32.8.2 Header synopsis [semaphore.syn]")#define __cpp_lib_senders 202506L // also in [](execution.syn#header:%3cexecution%3e "33.4 Header synopsis [execution.syn]")#define __cpp_lib_shared_mutex 201505L // also in [](shared.mutex.syn#header:%3cshared_mutex%3e "32.6.3 Header synopsis [shared.mutex.syn]")#define __cpp_lib_shared_ptr_arrays 201707L // also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_shared_ptr_weak_type 201606L // also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_shared_timed_mutex 201402L // also in [](shared.mutex.syn#header:%3cshared_mutex%3e "32.6.3 Header synopsis [shared.mutex.syn]")#define __cpp_lib_shift 202202L // also in [](algorithm.syn#header:%3calgorithm%3e "26.4 Header synopsis [algorithm.syn]")#define __cpp_lib_simd 202506L // also in [](simd.syn#header:%3csimd%3e "29.10.3 Header synopsis [simd.syn]")#define __cpp_lib_simd_complex 202502L // also in [](simd.syn#header:%3csimd%3e "29.10.3 Header synopsis [simd.syn]")#define __cpp_lib_simd_permutations 202506L // also in [](simd.syn#header:%3csimd%3e "29.10.3 Header synopsis [simd.syn]")#define __cpp_lib_smart_ptr_for_overwrite 202002L // also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_smart_ptr_owner_equality 202306L // also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_source_location 201907L // freestanding, also in [](source.location.syn#header:%3csource_location%3e "17.8.1 Header synopsis [source.location.syn]")#define __cpp_lib_span 202311L // freestanding, also in [](span.syn#header:%3cspan%3e "23.7.2.1 Header synopsis [span.syn]")#define __cpp_lib_span_initializer_list 202311L // freestanding, also in [](span.syn#header:%3cspan%3e "23.7.2.1 Header synopsis [span.syn]")#define __cpp_lib_spanstream 202106L // also in [](span.streams.overview#header:%3cspanstream%3e "31.9.1 Overview [span.streams.overview]")#define __cpp_lib_ssize 201902L // freestanding, also in [](iterator.synopsis#header:%3citerator%3e "24.2 Header  synopsis [iterator.synopsis]")#define __cpp_lib_sstream_from_string_view 202306L // also in [](sstream.syn#header:%3csstream%3e "31.8.1 Header synopsis [sstream.syn]")#define __cpp_lib_stacktrace 202011L // also in [](stacktrace.syn#header:%3cstacktrace%3e "19.6.2 Header synopsis [stacktrace.syn]")#define __cpp_lib_start_lifetime_as 202207L // freestanding, also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_starts_ends_with 201711L // also in [](string.syn#header:%3cstring%3e "27.4.2 Header synopsis [string.syn]"), [](string.view.synop#header:%3cstring_view%3e "27.3.2 Header synopsis [string.view.synop]")#define __cpp_lib_stdatomic_h 202011L // also in [](stdatomic.h.syn#header:%3cstdatomic.h%3e "32.5.12 C compatibility [stdatomic.h.syn]")#define __cpp_lib_string_contains 202011L // also in [](string.syn#header:%3cstring%3e "27.4.2 Header synopsis [string.syn]"), [](string.view.synop#header:%3cstring_view%3e "27.3.2 Header synopsis [string.view.synop]")#define __cpp_lib_string_resize_and_overwrite 202110L // also in [](string.syn#header:%3cstring%3e "27.4.2 Header synopsis [string.syn]")#define __cpp_lib_string_subview 202506L // also in [](string.syn#header:%3cstring%3e "27.4.2 Header synopsis [string.syn]"), [](string.view.synop#header:%3cstring_view%3e "27.3.2 Header synopsis [string.view.synop]")#define __cpp_lib_string_udls 201304L // also in [](string.syn#header:%3cstring%3e "27.4.2 Header synopsis [string.syn]")#define __cpp_lib_string_view 202403L // also in [](string.syn#header:%3cstring%3e "27.4.2 Header synopsis [string.syn]"), [](string.view.synop#header:%3cstring_view%3e "27.3.2 Header synopsis [string.view.synop]")#define __cpp_lib_submdspan 202411L // freestanding, also in [](mdspan.syn#header:%3cmdspan%3e "23.7.3.2 Header synopsis [mdspan.syn]")#define __cpp_lib_syncbuf 201803L // also in [](syncstream.syn#header:%3csyncstream%3e "31.11.1 Header synopsis [syncstream.syn]")#define __cpp_lib_task 202506L // also in [](execution.syn#header:%3cexecution%3e "33.4 Header synopsis [execution.syn]")#define __cpp_lib_text_encoding 202306L // also in [](text.encoding.syn#header:%3ctext_encoding%3e "28.4.1 Header synopsis [text.encoding.syn]")#define __cpp_lib_three_way_comparison 201907L // freestanding, also in [](compare.syn#header:%3ccompare%3e "17.12.1 Header synopsis [compare.syn]")#define __cpp_lib_to_address 201711L // freestanding, also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_to_array 201907L // freestanding, also in [](array.syn#header:%3carray%3e "23.3.2 Header synopsis [array.syn]")#define __cpp_lib_to_chars 202306L // also in [](charconv.syn#header:%3ccharconv%3e "28.2.1 Header synopsis [charconv.syn]")#define __cpp_lib_to_string 202306L // also in [](string.syn#header:%3cstring%3e "27.4.2 Header synopsis [string.syn]")#define __cpp_lib_to_underlying 202102L // freestanding, also in [](utility.syn#header:%3cutility%3e "22.2.1 Header synopsis [utility.syn]")#define __cpp_lib_transformation_trait_aliases 201304L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_transparent_operators 201510L// freestanding, also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]"), [](functional.syn#header:%3cfunctional%3e "22.10.2 Header synopsis [functional.syn]")#define __cpp_lib_trivially_relocatable 202502L// freestanding, also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]"), [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_tuple_element_t 201402L // freestanding, also in [](tuple.syn#header:%3ctuple%3e "22.4.2 Header synopsis [tuple.syn]")#define __cpp_lib_tuple_like 202311L// also in [](utility.syn#header:%3cutility%3e "22.2.1 Header synopsis [utility.syn]"), [](tuple.syn#header:%3ctuple%3e "22.4.2 Header synopsis [tuple.syn]"), [](associative.map.syn#header:%3cmap%3e "23.4.2 Header synopsis [associative.map.syn]"), [](unord.map.syn#header:%3cunordered_map%3e "23.5.2 Header synopsis [unord.map.syn]")#define __cpp_lib_tuples_by_type 201304L // freestanding, also in [](utility.syn#header:%3cutility%3e "22.2.1 Header synopsis [utility.syn]"), [](tuple.syn#header:%3ctuple%3e "22.4.2 Header synopsis [tuple.syn]")#define __cpp_lib_type_identity 201806L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_type_order 202506L // also in [](compare.syn#header:%3ccompare%3e "17.12.1 Header synopsis [compare.syn]")#define __cpp_lib_type_trait_variable_templates 201510L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_uncaught_exceptions 201411L // freestanding, also in [](support.exception.general#header:%3cexception%3e "17.9.1 General [support.exception.general]")#define __cpp_lib_unordered_map_try_emplace 201411L // also in [](unord.map.syn#header:%3cunordered_map%3e "23.5.2 Header synopsis [unord.map.syn]")#define __cpp_lib_unreachable 202202L // freestanding, also in [](utility.syn#header:%3cutility%3e "22.2.1 Header synopsis [utility.syn]")#define __cpp_lib_unwrap_ref 201811L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]")#define __cpp_lib_variant 202306L // also in [](variant.syn#header:%3cvariant%3e "22.6.2 Header synopsis [variant.syn]")#define __cpp_lib_void_t 201411L // freestanding, also in [](meta.type.synop#header:%3ctype_traits%3e "21.3.3 Header synopsis [meta.type.synop]") [3](#version.syn-3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L867) Additionally, each of the following macros is defined in a hardened implementation:#define __cpp_lib_hardened_array 202502L // also in [](array.syn#header:%3carray%3e "23.3.2 Header synopsis [array.syn]")#define __cpp_lib_hardened_basic_stacktrace 202506L // also in [](stacktrace.syn#header:%3cstacktrace%3e "19.6.2 Header synopsis [stacktrace.syn]")#define __cpp_lib_hardened_basic_string 202502L // also in [](string.syn#header:%3cstring%3e "27.4.2 Header synopsis [string.syn]")#define __cpp_lib_hardened_basic_string_view 202502L // also in [](string.view.synop#header:%3cstring_view%3e "27.3.2 Header synopsis [string.view.synop]")#define __cpp_lib_hardened_bitset 202502L // also in [](bitset.syn#header:%3cbitset%3e "22.9.1 Header synopsis [bitset.syn]")#define __cpp_lib_hardened_common_iterator 202506L // also in [](iterator.synopsis#header:%3citerator%3e "24.2 Header  synopsis [iterator.synopsis]")#define __cpp_lib_hardened_counted_iterator 202506L // also in [](iterator.synopsis#header:%3citerator%3e "24.2 Header  synopsis [iterator.synopsis]")#define __cpp_lib_hardened_deque 202502L // also in [](deque.syn#header:%3cdeque%3e "23.3.4 Header synopsis [deque.syn]")#define __cpp_lib_hardened_expected 202502L // also in [](expected.syn#header:%3cexpected%3e "22.8.2 Header synopsis [expected.syn]")#define __cpp_lib_hardened_forward_list 202502L // also in [](forward.list.syn#header:%3cforward_list%3e "23.3.6 Header synopsis [forward.list.syn]")#define __cpp_lib_hardened_inplace_vector 202502L // also in [](inplace.vector.syn#header:%3cinplace_vector%3e "23.3.15 Header synopsis [inplace.vector.syn]")#define __cpp_lib_hardened_list 202502L // also in [](list.syn#header:%3clist%3e "23.3.10 Header synopsis [list.syn]")#define __cpp_lib_hardened_mdspan 202502L // also in [](mdspan.syn#header:%3cmdspan%3e "23.7.3.2 Header synopsis [mdspan.syn]")#define __cpp_lib_hardened_optional 202502L // also in [](optional.syn#header:%3coptional%3e "22.5.2 Header synopsis [optional.syn]")#define __cpp_lib_hardened_shared_ptr_array 202506L // also in [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")#define __cpp_lib_hardened_span 202502L // also in [](span.syn#header:%3cspan%3e "23.7.2.1 Header synopsis [span.syn]")#define __cpp_lib_hardened_valarray 202502L // also in [](valarray.syn#header:%3cvalarray%3e "29.6.1 Header synopsis [valarray.syn]")#define __cpp_lib_hardened_vector 202502L // also in [](vector.syn#header:%3cvector%3e "23.3.12 Header synopsis [vector.syn]")#define __cpp_lib_hardened_view_interface 202506L // also in [](ranges.syn#header:%3cranges%3e "25.2 Header synopsis [ranges.syn]") [4](#version.syn-4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L891) The macro __cpp_lib_freestanding_operator_new is defined to the integer literal 202306L if all the default versions of the replaceable global allocation functions meet the requirements of a hosted implementation, and to the integer literal 0 otherwise ([[new.delete]](new.delete "17.6.3 Storage allocation and deallocation"))[.](#version.syn-4.sentence-1) [5](#version.syn-5) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L898) *Recommended practice*: Freestanding implementations should only define a macro from [](#header:%3cversion%3e "17.3.2 Header synopsis [version.syn]") if the implementation provides the corresponding facility in its entirety[.](#version.syn-5.sentence-1) [6](#version.syn-6) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L903) *Recommended practice*: A non-hardened implementation should not define macros from [](#header:%3cversion%3e "17.3.2 Header synopsis [version.syn]") required for hardened implementations[.](#version.syn-6.sentence-1) ### [17.3.3](#limits.syn) Header synopsis [[limits.syn]](limits.syn) // all freestandingnamespace std {// [[round.style]](#round.style "17.3.4 Enum float_­round_­style"), enumeration float_round_styleenum float_round_style; // [[numeric.limits]](#numeric.limits "17.3.5 Class template numeric_­limits"), class template numeric_limitstemplate class numeric_limits; template class numeric_limits; template class numeric_limits; template class numeric_limits; template<> class numeric_limits; template<> class numeric_limits; template<> class numeric_limits; template<> class numeric_limits; template<> class numeric_limits; template<> class numeric_limits; template<> class numeric_limits; template<> class numeric_limits; template<> class numeric_limits; template<> class numeric_limits; template<> class numeric_limits; template<> class numeric_limits; template<> class numeric_limits; template<> class numeric_limits; template<> class numeric_limits; template<> class numeric_limits; template<> class numeric_limits; template<> class numeric_limits; template<> class numeric_limits;} ### [17.3.4](#round.style) Enum float_round_style [[round.style]](round.style) [🔗](#lib:float_round_style_) namespace std {enum float_round_style { round_indeterminate = -1, round_toward_zero = 0, round_to_nearest = 1, round_toward_infinity = 2, round_toward_neg_infinity = 3};} [1](#round.style-1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L968) The rounding mode for floating-point arithmetic is characterized by the values: - [(1.1)](#round.style-1.1) round_indeterminate if the rounding style is indeterminable - [(1.2)](#round.style-1.2) round_toward_zero if the rounding style is toward zero - [(1.3)](#round.style-1.3) round_to_nearest if the rounding style is to the nearest representable value - [(1.4)](#round.style-1.4) round_toward_infinity if the rounding style is toward infinity - [(1.5)](#round.style-1.5) round_toward_neg_infinity if the rounding style is toward negative infinity ### [17.3.5](#numeric.limits) Class template numeric_limits [[numeric.limits]](numeric.limits) #### [17.3.5.1](#numeric.limits.general) General [[numeric.limits.general]](numeric.limits.general) [1](#numeric.limits.general-1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L998) Thenumeric_limits class template provides a C++ program with information about various properties of the implementation's representation of the arithmetic types[.](#numeric.limits.general-1.sentence-1) [🔗](#lib:numeric_limits__) namespace std {template class numeric_limits {public:static constexpr bool is_specialized = false; static constexpr T min() noexcept { return T(); }static constexpr T max() noexcept { return T(); }static constexpr T lowest() noexcept { return T(); }static constexpr int digits = 0; static constexpr int digits10 = 0; static constexpr int max_digits10 = 0; static constexpr bool is_signed = false; static constexpr bool is_integer = false; static constexpr bool is_exact = false; static constexpr int radix = 0; static constexpr T epsilon() noexcept { return T(); }static constexpr T round_error() noexcept { return T(); }static constexpr int min_exponent = 0; static constexpr int min_exponent10 = 0; static constexpr int max_exponent = 0; static constexpr int max_exponent10 = 0; static constexpr bool has_infinity = false; static constexpr bool has_quiet_NaN = false; static constexpr bool has_signaling_NaN = false; static constexpr T infinity() noexcept { return T(); }static constexpr T quiet_NaN() noexcept { return T(); }static constexpr T signaling_NaN() noexcept { return T(); }static constexpr T denorm_min() noexcept { return T(); }static constexpr bool is_iec559 = false; static constexpr bool is_bounded = false; static constexpr bool is_modulo = false; static constexpr bool traps = false; static constexpr bool tinyness_before = false; static constexpr float_round_style round_style = round_toward_zero; };} [2](#numeric.limits.general-2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1050) For all members declaredstatic constexpr in thenumeric_limits template, specializations shall define these values in such a way that they are usable as constant expressions[.](#numeric.limits.general-2.sentence-1) [3](#numeric.limits.general-3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1059) For thenumeric_limits primary template, all data members are value-initialized and all member functions return a value-initialized object[.](#numeric.limits.general-3.sentence-1) [*Note [1](#numeric.limits.general-note-1)*: This means all members have zero or false values unless numeric_limits is specialized for a type[.](#numeric.limits.general-3.sentence-2) — *end note*] [4](#numeric.limits.general-4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1069) Specializations shall be provided for each arithmetic type, both floating-point and integer, includingbool[.](#numeric.limits.general-4.sentence-1) The memberis_specialized shall betrue for all such specializations ofnumeric_limits[.](#numeric.limits.general-4.sentence-2) [5](#numeric.limits.general-5) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1081) The value of each member of a specialization ofnumeric_limits on a cv-qualified typecv T shall be equal to the value of the corresponding member of the specialization on the unqualified type T[.](#numeric.limits.general-5.sentence-1) [6](#numeric.limits.general-6) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1087) Non-arithmetic standard types, such as[complex](complex "29.4.3 Class template complex [complex]"), shall not have specializations[.](#numeric.limits.general-6.sentence-1) #### [17.3.5.2](#numeric.limits.members) numeric_limits members [[numeric.limits.members]](numeric.limits.members) [1](#numeric.limits.members-1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1093) Each member function defined in this subclause is signal-safe ([[support.signal]](support.signal "17.14.5 Signal handlers"))[.](#numeric.limits.members-1.sentence-1) [*Note [1](#numeric.limits.members-note-1)*: The arithmetic specification described in ISO/IEC 10967-1:2012 is commonly termed LIA-1[.](#numeric.limits.members-1.sentence-2) — *end note*] [🔗](#lib:min,numeric_limits) `static constexpr T min() noexcept; ` [2](#numeric.limits.members-2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1108) Minimum finite value[.](#numeric.limits.members-2.sentence-1)[161](#footnote-161 "Equivalent to CHAR_­MIN, SHRT_­MIN, FLT_­MIN, DBL_­MIN, etc.") [3](#numeric.limits.members-3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1116) For floating-point types with subnormal numbers, returns the minimum positive normalized value[.](#numeric.limits.members-3.sentence-1) [4](#numeric.limits.members-4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1120) Meaningful for all specializations in whichis_bounded != false, oris_bounded == false && is_signed == false[.](#numeric.limits.members-4.sentence-1) [🔗](#lib:max,numeric_limits) `static constexpr T max() noexcept; ` [5](#numeric.limits.members-5) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1133) Maximum finite value[.](#numeric.limits.members-5.sentence-1)[162](#footnote-162 "Equivalent to CHAR_­MAX, SHRT_­MAX, FLT_­MAX, DBL_­MAX, etc.") [6](#numeric.limits.members-6) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1140) Meaningful for all specializations in whichis_bounded != false[.](#numeric.limits.members-6.sentence-1) [🔗](#lib:lowest,numeric_limits) `static constexpr T lowest() noexcept; ` [7](#numeric.limits.members-7) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1151) A finite value x such that there is no other finite value y where y < x[.](#numeric.limits.members-7.sentence-1)[163](#footnote-163 "lowest() is necessary because not all floating-point representations have a smallest (most negative) value that is the negative of the largest (most positive) finite value.") [8](#numeric.limits.members-8) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1160) Meaningful for all specializations in which is_bounded != false[.](#numeric.limits.members-8.sentence-1) [🔗](#lib:digits,numeric_limits) `static constexpr int digits; ` [9](#numeric.limits.members-9) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1170) Number ofradix digits that can be represented without change[.](#numeric.limits.members-9.sentence-1) [10](#numeric.limits.members-10) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1175) For integer types, the number of non-sign bits in the representation[.](#numeric.limits.members-10.sentence-1) [11](#numeric.limits.members-11) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1178) For floating-point types, the number of radix digits in the significand[.](#numeric.limits.members-11.sentence-1)[164](#footnote-164 "Equivalent to FLT_­MANT_­DIG, DBL_­MANT_­DIG, LDBL_­MANT_­DIG.") [🔗](#lib:digits10,numeric_limits) `static constexpr int digits10; ` [12](#numeric.limits.members-12) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1193) Number of base 10 digits that can be represented without change[.](#numeric.limits.members-12.sentence-1)[165](#footnote-165 "Equivalent to FLT_­DIG, DBL_­DIG, LDBL_­DIG.") [13](#numeric.limits.members-13) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1201) Meaningful for all specializations in whichis_bounded != false[.](#numeric.limits.members-13.sentence-1) [🔗](#lib:max_digits10,numeric_limits) `static constexpr int max_digits10; ` [14](#numeric.limits.members-14) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1212) Number of base 10 digits required to ensure that values which differ are always differentiated[.](#numeric.limits.members-14.sentence-1) [15](#numeric.limits.members-15) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1216) Meaningful for all floating-point types[.](#numeric.limits.members-15.sentence-1) [🔗](#lib:is_signed,numeric_limits) `static constexpr bool is_signed; ` [16](#numeric.limits.members-16) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1226) true if the type is signed[.](#numeric.limits.members-16.sentence-1) [17](#numeric.limits.members-17) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1229) Meaningful for all specializations[.](#numeric.limits.members-17.sentence-1) [🔗](#lib:is_integer,numeric_limits) `static constexpr bool is_integer; ` [18](#numeric.limits.members-18) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1239) true if the type is integer[.](#numeric.limits.members-18.sentence-1) [19](#numeric.limits.members-19) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1242) Meaningful for all specializations[.](#numeric.limits.members-19.sentence-1) [🔗](#lib:is_exact,numeric_limits) `static constexpr bool is_exact; ` [20](#numeric.limits.members-20) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1252) true if the type uses an exact representation[.](#numeric.limits.members-20.sentence-1) All integer types are exact, but not all exact types are integer[.](#numeric.limits.members-20.sentence-2) For example, rational and fixed-exponent representations are exact but not integer[.](#numeric.limits.members-20.sentence-3) [21](#numeric.limits.members-21) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1257) Meaningful for all specializations[.](#numeric.limits.members-21.sentence-1) [🔗](#lib:radix,numeric_limits) `static constexpr int radix; ` [22](#numeric.limits.members-22) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1267) For floating-point types, specifies the base or radix of the exponent representation (often 2)[.](#numeric.limits.members-22.sentence-1)[166](#footnote-166 "Equivalent to FLT_­RADIX.") [23](#numeric.limits.members-23) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1274) For integer types, specifies the base of the representation[.](#numeric.limits.members-23.sentence-1)[167](#footnote-167 "Distinguishes types with bases other than 2 (e.g., BCD).") [24](#numeric.limits.members-24) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1281) Meaningful for all specializations[.](#numeric.limits.members-24.sentence-1) [🔗](#lib:epsilon,numeric_limits) `static constexpr T epsilon() noexcept; ` [25](#numeric.limits.members-25) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1291) Machine epsilon: the difference between 1 and the least value greater than 1 that is representable[.](#numeric.limits.members-25.sentence-1)[168](#footnote-168 "Equivalent to FLT_­EPSILON, DBL_­EPSILON, LDBL_­EPSILON.") [26](#numeric.limits.members-26) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1298) Meaningful for all floating-point types[.](#numeric.limits.members-26.sentence-1) [🔗](#lib:round_error,numeric_limits) `static constexpr T round_error() noexcept; ` [27](#numeric.limits.members-27) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1308) Measure of the maximum rounding error[.](#numeric.limits.members-27.sentence-1)[169](#footnote-169 "Rounding error is described in ISO/IEC 10967-1:2012 Section 5.2.4 and Annex C Rationale Section C.5.2.4 — Rounding and rounding constants.") [🔗](#lib:min_exponent,numeric_limits) `static constexpr int min_exponent; ` [28](#numeric.limits.members-28) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1322) Minimum negative integer such thatradix raised to the power of one less than that integer is a normalized floating-point number[.](#numeric.limits.members-28.sentence-1)[170](#footnote-170 "Equivalent to FLT_­MIN_­EXP, DBL_­MIN_­EXP, LDBL_­MIN_­EXP.") [29](#numeric.limits.members-29) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1332) Meaningful for all floating-point types[.](#numeric.limits.members-29.sentence-1) [🔗](#lib:min_exponent10,numeric_limits) `static constexpr int min_exponent10; ` [30](#numeric.limits.members-30) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1342) Minimum negative integer such that 10 raised to that power is in the range of normalized floating-point numbers[.](#numeric.limits.members-30.sentence-1)[171](#footnote-171 "Equivalent to FLT_­MIN_­10_­EXP, DBL_­MIN_­10_­EXP, LDBL_­MIN_­10_­EXP.") [31](#numeric.limits.members-31) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1350) Meaningful for all floating-point types[.](#numeric.limits.members-31.sentence-1) [🔗](#lib:max_exponent,numeric_limits) `static constexpr int max_exponent; ` [32](#numeric.limits.members-32) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1360) Maximum positive integer such thatradix raised to the power one less than that integer is a representable finite floating-point number[.](#numeric.limits.members-32.sentence-1)[172](#footnote-172 "Equivalent to FLT_­MAX_­EXP, DBL_­MAX_­EXP, LDBL_­MAX_­EXP.") [33](#numeric.limits.members-33) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1370) Meaningful for all floating-point types[.](#numeric.limits.members-33.sentence-1) [🔗](#lib:max_exponent10,numeric_limits) `static constexpr int max_exponent10; ` [34](#numeric.limits.members-34) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1380) Maximum positive integer such that 10 raised to that power is in the range of representable finite floating-point numbers[.](#numeric.limits.members-34.sentence-1)[173](#footnote-173 "Equivalent to FLT_­MAX_­10_­EXP, DBL_­MAX_­10_­EXP, LDBL_­MAX_­10_­EXP.") [35](#numeric.limits.members-35) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1388) Meaningful for all floating-point types[.](#numeric.limits.members-35.sentence-1) [🔗](#lib:has_infinity,numeric_limits) `static constexpr bool has_infinity; ` [36](#numeric.limits.members-36) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1398) true if the type has a representation for positive infinity[.](#numeric.limits.members-36.sentence-1) [37](#numeric.limits.members-37) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1401) Meaningful for all floating-point types[.](#numeric.limits.members-37.sentence-1) [38](#numeric.limits.members-38) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1404) Shall betrue for all specializations in whichis_iec559 != false[.](#numeric.limits.members-38.sentence-1) [🔗](#lib:has_quiet_NaN,numeric_limits) `static constexpr bool has_quiet_NaN; ` [39](#numeric.limits.members-39) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1417) true if the type has a representation for a quiet (non-signaling) “Not a Number”[.](#numeric.limits.members-39.sentence-1)[174](#footnote-174 "Required by ISO/IEC 10967-1:2012.") [40](#numeric.limits.members-40) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1424) Meaningful for all floating-point types[.](#numeric.limits.members-40.sentence-1) [41](#numeric.limits.members-41) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1427) Shall betrue for all specializations in whichis_iec559 != false[.](#numeric.limits.members-41.sentence-1) [🔗](#lib:has_signaling_NaN,numeric_limits) `static constexpr bool has_signaling_NaN; ` [42](#numeric.limits.members-42) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1440) true if the type has a representation for a signaling “Not a Number”[.](#numeric.limits.members-42.sentence-1)[175](#footnote-175 "Required by ISO/IEC 10967-1:2012.") [43](#numeric.limits.members-43) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1446) Meaningful for all floating-point types[.](#numeric.limits.members-43.sentence-1) [44](#numeric.limits.members-44) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1449) Shall betrue for all specializations in whichis_iec559 != false[.](#numeric.limits.members-44.sentence-1) [🔗](#lib:infinity,numeric_limits) `static constexpr T infinity() noexcept; ` [45](#numeric.limits.members-45) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1462) Representation of positive infinity, if available[.](#numeric.limits.members-45.sentence-1)[176](#footnote-176 "Required by ISO/IEC 10967-1:2012.") [46](#numeric.limits.members-46) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1468) Meaningful for all specializations for whichhas_infinity != false[.](#numeric.limits.members-46.sentence-1) Required in specializations for whichis_iec559 != false[.](#numeric.limits.members-46.sentence-2) [🔗](#lib:quiet_NaN,numeric_limits) `static constexpr T quiet_NaN() noexcept; ` [47](#numeric.limits.members-47) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1481) Representation of a quiet “Not a Number”, if available[.](#numeric.limits.members-47.sentence-1)[177](#footnote-177 "Required by ISO/IEC 10967-1:2012.") [48](#numeric.limits.members-48) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1487) Meaningful for all specializations for whichhas_quiet_NaN != false[.](#numeric.limits.members-48.sentence-1) Required in specializations for whichis_iec559 != false[.](#numeric.limits.members-48.sentence-2) [🔗](#lib:signaling_NaN,numeric_limits) `static constexpr T signaling_NaN() noexcept; ` [49](#numeric.limits.members-49) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1500) Representation of a signaling “Not a Number”, if available[.](#numeric.limits.members-49.sentence-1)[178](#footnote-178 "Required by ISO/IEC 10967-1:2012.") [50](#numeric.limits.members-50) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1506) Meaningful for all specializations for whichhas_signaling_NaN != false[.](#numeric.limits.members-50.sentence-1) Required in specializations for whichis_iec559 != false[.](#numeric.limits.members-50.sentence-2) [🔗](#lib:denorm_min,numeric_limits) `static constexpr T denorm_min() noexcept; ` [51](#numeric.limits.members-51) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1520) Minimum positive subnormal value, if available[.](#numeric.limits.members-51.sentence-1)[179](#footnote-179 "Required by ISO/IEC 10967-1:2012.") Otherwise, minimum positive normalized value[.](#numeric.limits.members-51.sentence-2) [52](#numeric.limits.members-52) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1527) Meaningful for all floating-point types[.](#numeric.limits.members-52.sentence-1) [🔗](#lib:is_iec559,numeric_limits) `static constexpr bool is_iec559; ` [53](#numeric.limits.members-53) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1537) true if and only if the type adheres to ISO/IEC 60559[.](#numeric.limits.members-53.sentence-1)[180](#footnote-180 "ISO/IEC 60559:2020 is the same as IEEE 754-2019.") [*Note [2](#numeric.limits.members-note-2)*: The value is true for any of the typesfloat16_t, float32_t, float64_t, or float128_t, if present ([[basic.extended.fp]](basic.extended.fp "6.9.3 Optional extended floating-point types"))[.](#numeric.limits.members-53.sentence-2) — *end note*] [54](#numeric.limits.members-54) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1548) Meaningful for all floating-point types[.](#numeric.limits.members-54.sentence-1) [🔗](#lib:is_bounded,numeric_limits) `static constexpr bool is_bounded; ` [55](#numeric.limits.members-55) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1558) true if the set of values representable by the type is finite[.](#numeric.limits.members-55.sentence-1)[181](#footnote-181 "Required by ISO/IEC 10967-1:2012.") [*Note [3](#numeric.limits.members-note-3)*: All fundamental types ([[basic.fundamental]](basic.fundamental "6.9.2 Fundamental types")) are bounded[.](#numeric.limits.members-55.sentence-2) This member would be false for arbitrary precision types[.](#numeric.limits.members-55.sentence-3) — *end note*] [56](#numeric.limits.members-56) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1568) Meaningful for all specializations[.](#numeric.limits.members-56.sentence-1) [🔗](#lib:is_modulo,numeric_limits) `static constexpr bool is_modulo; ` [57](#numeric.limits.members-57) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1578) true if the type is modulo[.](#numeric.limits.members-57.sentence-1)[182](#footnote-182 "Required by ISO/IEC 10967-1:2012.") A type is modulo if, for any operation involving +, -, or* on values of that type whose result would fall outside the range [min(), max()], the value returned differs from the true value by an integer multiple of max() - min() + 1[.](#numeric.limits.members-57.sentence-2) [58](#numeric.limits.members-58) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1588) [*Example [1](#numeric.limits.members-example-1)*: is_modulo is false for signed integer types ([[basic.fundamental]](basic.fundamental "6.9.2 Fundamental types")) unless an implementation, as an extension to this document, defines signed integer overflow to wrap[.](#numeric.limits.members-58.sentence-1) — *end example*] [59](#numeric.limits.members-59) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1595) Meaningful for all specializations[.](#numeric.limits.members-59.sentence-1) [🔗](#lib:traps,numeric_limits) `static constexpr bool traps; ` [60](#numeric.limits.members-60) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1605) true if, at the start of the program, there exists a value of the type that would cause an arithmetic operation using that value to trap[.](#numeric.limits.members-60.sentence-1)[183](#footnote-183 "Required by ISO/IEC 10967-1:2012.") [61](#numeric.limits.members-61) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1613) Meaningful for all specializations[.](#numeric.limits.members-61.sentence-1) [🔗](#lib:tinyness_before,numeric_limits) `static constexpr bool tinyness_before; ` [62](#numeric.limits.members-62) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1623) true if tinyness is detected before rounding[.](#numeric.limits.members-62.sentence-1)[184](#footnote-184 "Refer to ISO/IEC 60559. Required by ISO/IEC 10967-1:2012.") [63](#numeric.limits.members-63) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1632) Meaningful for all floating-point types[.](#numeric.limits.members-63.sentence-1) [🔗](#lib:round_style,numeric_limits) `static constexpr float_round_style round_style; ` [64](#numeric.limits.members-64) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1642) The rounding style for the type[.](#numeric.limits.members-64.sentence-1)[185](#footnote-185 "Equivalent to FLT_­ROUNDS. Required by ISO/IEC 10967-1:2012.") [65](#numeric.limits.members-65) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1649) Meaningful for all floating-point types[.](#numeric.limits.members-65.sentence-1) Specializations for integer types shall returnround_toward_zero[.](#numeric.limits.members-65.sentence-2) [161)](#footnote-161)[161)](#footnoteref-161) Equivalent to CHAR_MIN, SHRT_MIN,FLT_MIN, DBL_MIN, etc[.](#footnote-161.sentence-1) [162)](#footnote-162)[162)](#footnoteref-162) Equivalent to CHAR_MAX, SHRT_MAX,FLT_MAX, DBL_MAX, etc[.](#footnote-162.sentence-1) [163)](#footnote-163)[163)](#footnoteref-163) lowest() is necessary because not all floating-point representations have a smallest (most negative) value that is the negative of the largest (most positive) finite value[.](#footnote-163.sentence-1) [164)](#footnote-164)[164)](#footnoteref-164) Equivalent to FLT_MANT_DIG, DBL_MANT_DIG,LDBL_MANT_DIG[.](#footnote-164.sentence-1) [165)](#footnote-165)[165)](#footnoteref-165) Equivalent to FLT_DIG, DBL_DIG,LDBL_DIG[.](#footnote-165.sentence-1) [166)](#footnote-166)[166)](#footnoteref-166) Equivalent to FLT_RADIX[.](#footnote-166.sentence-1) [167)](#footnote-167)[167)](#footnoteref-167) Distinguishes types with bases other than 2 (e.g., BCD)[.](#footnote-167.sentence-1) [168)](#footnote-168)[168)](#footnoteref-168) Equivalent to FLT_EPSILON, DBL_EPSILON, LDBL_EPSILON[.](#footnote-168.sentence-1) [169)](#footnote-169)[169)](#footnoteref-169) Rounding error is described in ISO/IEC 10967-1:2012 Section 5.2.4 and Annex C Rationale Section C.5.2.4 — Rounding and rounding constants[.](#footnote-169.sentence-1) [170)](#footnote-170)[170)](#footnoteref-170) Equivalent to FLT_MIN_EXP, DBL_MIN_EXP,LDBL_MIN_EXP[.](#footnote-170.sentence-1) [171)](#footnote-171)[171)](#footnoteref-171) Equivalent toFLT_MIN_10_EXP, DBL_MIN_10_EXP, LDBL_MIN_10_EXP[.](#footnote-171.sentence-1) [172)](#footnote-172)[172)](#footnoteref-172) Equivalent to FLT_MAX_EXP,DBL_MAX_EXP, LDBL_MAX_EXP[.](#footnote-172.sentence-1) [173)](#footnote-173)[173)](#footnoteref-173) Equivalent toFLT_MAX_10_EXP, DBL_MAX_10_EXP, LDBL_MAX_10_EXP[.](#footnote-173.sentence-1) [174)](#footnote-174)[174)](#footnoteref-174) Required by ISO/IEC 10967-1:2012[.](#footnote-174.sentence-1) [175)](#footnote-175)[175)](#footnoteref-175) Required by ISO/IEC 10967-1:2012[.](#footnote-175.sentence-1) [176)](#footnote-176)[176)](#footnoteref-176) Required by ISO/IEC 10967-1:2012[.](#footnote-176.sentence-1) [177)](#footnote-177)[177)](#footnoteref-177) Required by ISO/IEC 10967-1:2012[.](#footnote-177.sentence-1) [178)](#footnote-178)[178)](#footnoteref-178) Required by ISO/IEC 10967-1:2012[.](#footnote-178.sentence-1) [179)](#footnote-179)[179)](#footnoteref-179) Required by ISO/IEC 10967-1:2012[.](#footnote-179.sentence-1) [180)](#footnote-180)[180)](#footnoteref-180) ISO/IEC 60559:2020 is the same as IEEE 754-2019[.](#footnote-180.sentence-1) [181)](#footnote-181)[181)](#footnoteref-181) Required by ISO/IEC 10967-1:2012[.](#footnote-181.sentence-1) [182)](#footnote-182)[182)](#footnoteref-182) Required by ISO/IEC 10967-1:2012[.](#footnote-182.sentence-1) [183)](#footnote-183)[183)](#footnoteref-183) Required by ISO/IEC 10967-1:2012[.](#footnote-183.sentence-1) [184)](#footnote-184)[184)](#footnoteref-184) Refer to ISO/IEC 60559[.](#footnote-184.sentence-1) Required by ISO/IEC 10967-1:2012[.](#footnote-184.sentence-2) [185)](#footnote-185)[185)](#footnoteref-185) Equivalent to FLT_ROUNDS[.](#footnote-185.sentence-1) Required by ISO/IEC 10967-1:2012[.](#footnote-185.sentence-2) #### [17.3.5.3](#numeric.special) numeric_limits specializations [[numeric.special]](numeric.special) [1](#numeric.special-1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1657) All members shall be provided for all specializations[.](#numeric.special-1.sentence-1) However, many values are only required to be meaningful under certain conditions (for example,epsilon() is only meaningful ifis_integer isfalse)[.](#numeric.special-1.sentence-2) Any value that is not “meaningful” shall be set to 0 orfalse[.](#numeric.special-1.sentence-3) [2](#numeric.special-2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1670) [*Example [1](#numeric.special-example-1)*: namespace std {template<> class numeric_limits {public:static constexpr bool is_specialized = true; static constexpr float min() noexcept { return 1.17549435E-38F; }static constexpr float max() noexcept { return 3.40282347E+38F; }static constexpr float lowest() noexcept { return -3.40282347E+38F; }static constexpr int digits = 24; static constexpr int digits10 = 6; static constexpr int max_digits10 = 9; static constexpr bool is_signed = true; static constexpr bool is_integer = false; static constexpr bool is_exact = false; static constexpr int radix = 2; static constexpr float epsilon() noexcept { return 1.19209290E-07F; }static constexpr float round_error() noexcept { return 0.5F; }static constexpr int min_exponent = -125; static constexpr int min_exponent10 = - 37; static constexpr int max_exponent = +128; static constexpr int max_exponent10 = + 38; static constexpr bool has_infinity = true; static constexpr bool has_quiet_NaN = true; static constexpr bool has_signaling_NaN = true; static constexpr float infinity() noexcept { return *value*; }static constexpr float quiet_NaN() noexcept { return *value*; }static constexpr float signaling_NaN() noexcept { return *value*; }static constexpr float denorm_min() noexcept { return min(); }static constexpr bool is_iec559 = true; static constexpr bool is_bounded = true; static constexpr bool is_modulo = false; static constexpr bool traps = true; static constexpr bool tinyness_before = true; static constexpr float_round_style round_style = round_to_nearest; };} — *end example*] [3](#numeric.special-3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1720) The specialization forbool shall be provided as follows: [🔗](#lib:numeric_limits%3cbool%3e) namespace std {template<> class numeric_limits {public:static constexpr bool is_specialized = true; static constexpr bool min() noexcept { return false; }static constexpr bool max() noexcept { return true; }static constexpr bool lowest() noexcept { return false; }static constexpr int digits = 1; static constexpr int digits10 = 0; static constexpr int max_digits10 = 0; static constexpr bool is_signed = false; static constexpr bool is_integer = true; static constexpr bool is_exact = true; static constexpr int radix = 2; static constexpr bool epsilon() noexcept { return 0; }static constexpr bool round_error() noexcept { return 0; }static constexpr int min_exponent = 0; static constexpr int min_exponent10 = 0; static constexpr int max_exponent = 0; static constexpr int max_exponent10 = 0; static constexpr bool has_infinity = false; static constexpr bool has_quiet_NaN = false; static constexpr bool has_signaling_NaN = false; static constexpr bool infinity() noexcept { return 0; }static constexpr bool quiet_NaN() noexcept { return 0; }static constexpr bool signaling_NaN() noexcept { return 0; }static constexpr bool denorm_min() noexcept { return 0; }static constexpr bool is_iec559 = false; static constexpr bool is_bounded = true; static constexpr bool is_modulo = false; static constexpr bool traps = false; static constexpr bool tinyness_before = false; static constexpr float_round_style round_style = round_toward_zero; };} ### [17.3.6](#climits.syn) Header synopsis [[climits.syn]](climits.syn) [🔗](#header:%3cclimits%3e) // all freestanding#define BOOL_WIDTH *see below*#define CHAR_BIT *see below*#define CHAR_WIDTH *see below*#define SCHAR_WIDTH *see below*#define UCHAR_WIDTH *see below*#define USHRT_WIDTH *see below*#define SHRT_WIDTH *see below*#define UINT_WIDTH *see below*#define INT_WIDTH *see below*#define ULONG_WIDTH *see below*#define LONG_WIDTH *see below*#define ULLONG_WIDTH *see below*#define LLONG_WIDTH *see below*#define SCHAR_MIN *see below*#define SCHAR_MAX *see below*#define UCHAR_MAX *see below*#define CHAR_MIN *see below*#define CHAR_MAX *see below*#define MB_LEN_MAX *see below*#define SHRT_MIN *see below*#define SHRT_MAX *see below*#define USHRT_MAX *see below*#define INT_MIN *see below*#define INT_MAX *see below*#define UINT_MAX *see below*#define LONG_MIN *see below*#define LONG_MAX *see below*#define ULONG_MAX *see below*#define LLONG_MIN *see below*#define LLONG_MAX *see below*#define ULLONG_MAX *see below* [1](#climits.syn-1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1807) The header [](#header:%3cclimits%3e "17.3.6 Header synopsis [climits.syn]") defines all macros the same as the C standard library header [](support.c.headers.general#header:%3climits.h%3e "17.15.1 General [support.c.headers.general]"), except that it does not define the macro BITINT_MAXWIDTH[.](#climits.syn-1.sentence-1) [*Note [1](#climits.syn-note-1)*: Except for the WIDTH macros, CHAR_BIT, and MB_LEN_MAX, a macro referring to an integer type T defines a constant whose type is the promoted type of T ([[conv.prom]](conv.prom "7.3.7 Integral promotions"))[.](#climits.syn-1.sentence-2) — *end note*] See also: ISO/IEC 9899:2024, 5.2.4.2.1 ### [17.3.7](#cfloat.syn) Header synopsis [[cfloat.syn]](cfloat.syn) [🔗](#header:%3ccfloat%3e) // all freestanding#define __STDC_VERSION_FLOAT_H__ 202311L#define FLT_ROUNDS *see below*#define FLT_EVAL_METHOD *see below*#define FLT_RADIX *see below*#define INFINITY *see below*#define NAN *see below*#define FLT_SNAN *see below*#define DBL_SNAN *see below*#define LDBL_SNAN *see below*#define FLT_MANT_DIG *see below*#define DBL_MANT_DIG *see below*#define LDBL_MANT_DIG *see below*#define FLT_DECIMAL_DIG *see below*#define DBL_DECIMAL_DIG *see below*#define LDBL_DECIMAL_DIG *see below*#define FLT_DIG *see below*#define DBL_DIG *see below*#define LDBL_DIG *see below*#define FLT_MIN_EXP *see below*#define DBL_MIN_EXP *see below*#define LDBL_MIN_EXP *see below*#define FLT_MIN_10_EXP *see below*#define DBL_MIN_10_EXP *see below*#define LDBL_MIN_10_EXP *see below*#define FLT_MAX_EXP *see below*#define DBL_MAX_EXP *see below*#define LDBL_MAX_EXP *see below*#define FLT_MAX_10_EXP *see below*#define DBL_MAX_10_EXP *see below*#define LDBL_MAX_10_EXP *see below*#define FLT_MAX *see below*#define DBL_MAX *see below*#define LDBL_MAX *see below*#define FLT_EPSILON *see below*#define DBL_EPSILON *see below*#define LDBL_EPSILON *see below*#define FLT_MIN *see below*#define DBL_MIN *see below*#define LDBL_MIN *see below*#define FLT_TRUE_MIN *see below*#define DBL_TRUE_MIN *see below*#define LDBL_TRUE_MIN *see below* [1](#cfloat.syn-1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L1870) The header [](#header:%3ccfloat%3e "17.3.7 Header synopsis [cfloat.syn]") defines all macros the same as the C standard library header [](support.c.headers.general#header:%3cfloat.h%3e "17.15.1 General [support.c.headers.general]")[.](#cfloat.syn-1.sentence-1) See also: ISO/IEC 9899:2024, 5.2.4.2.2