From ca3cf855d70740ee75ab6053ca17b4568bf18a2f Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Fri, 22 Aug 2025 11:36:22 +0200 Subject: [PATCH] Extern : aggiornata fast_float all'ultima versione disponibile (8.0.2). --- Lua/Lib/lua54D32.lib | Bin 31734 -> 31734 bytes Lua/Lib/lua54D32.pdb | Bin 1830912 -> 1830912 bytes Lua/Lib/lua54D64.pdb | Bin 1167360 -> 1167360 bytes Lua/Lib/lua54R32.lib | Bin 31242 -> 31242 bytes fast_float/fast_float.h | 664 ++++++++++++++++++++++++++++++++-------- 5 files changed, 541 insertions(+), 123 deletions(-) diff --git a/Lua/Lib/lua54D32.lib b/Lua/Lib/lua54D32.lib index feeeb08869126dcc669ad73e49eb8cfed5751890..fc1887c4e4bd697da53c3afd34c5928648b8fc50 100644 GIT binary patch delta 99 zcmezNo$=du#tm*}EY)vo&QJC-+sN2I`Hxu)WB=wzb7@A_?-Mjm?3%pMQhxFbi%hVT v2B$-Eer|zYW=j8LppwacmT@eF3eis|Z?J^um6=>;#Q{_bl-#_?D#Q^0jWa1P delta 99 zcmezNo$=du#tm*}EG+^%eogi=+sN2G`Hxu)WB2Arb7@A_8P_l0-!*xorTpX>7MWlv v4NiyT{M-V)%#`lQKqZs?EaO;|lU$BY-e3vQD>J#yiUX(=D7kr&Rfr=1hBGM< diff --git a/Lua/Lib/lua54D32.pdb b/Lua/Lib/lua54D32.pdb index 6ce9f8b9786fe81166901a93f5fe24811ec37216..1fa32ff1659236632c4c2f3a34ce36b17e6fe764 100644 GIT binary patch delta 92690 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

7_{ur8xsc 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 diff --git a/Lua/Lib/lua54R32.lib b/Lua/Lib/lua54R32.lib index 117e6a0a648e4dac5ae6e8fbaa083442bfe679c4..32e08d8d30f7f25b086da0cacfba8cfb8ba31935 100644 GIT binary patch delta 91 zcmeDB!r1kNaf6i^%dZPhe@?bDTgTWx`K?(5WB+D1b1_C1_rKzoCns36fkibY^ILKN oSrV2Ntah%x?=DYHw2+@1XC^)Qyk#+1h0Nr5E1-(a8CHwz0rGYvq5uE@ delta 91 zcmeDB!r1kNaf6i^%S^@(-zVFdtz+z-{MIajv3s+dxfmmhTI#dUlM^i3z@i$H`7Jqs oED6gB*6!HbPcBbRw2+@1XC^)Qyk#+1h0Nr5E1-(a8CHwz0lMBKf&c&j diff --git a/fast_float/fast_float.h b/fast_float/fast_float.h index f171216..cb044c2 100644 --- a/fast_float/fast_float.h +++ b/fast_float/fast_float.h @@ -100,7 +100,7 @@ #endif // Testing for https://wg21.link/N3652, adopted in C++14 -#if __cpp_constexpr >= 201304 +#if defined(__cpp_constexpr) && __cpp_constexpr >= 201304 #define FASTFLOAT_CONSTEXPR14 constexpr #else #define FASTFLOAT_CONSTEXPR14 @@ -119,8 +119,15 @@ #define FASTFLOAT_HAS_IS_CONSTANT_EVALUATED 0 #endif +#if defined(__cpp_if_constexpr) && __cpp_if_constexpr >= 201606L +#define FASTFLOAT_IF_CONSTEXPR17(x) if constexpr (x) +#else +#define FASTFLOAT_IF_CONSTEXPR17(x) if (x) +#endif + // Testing for relevant C++20 constexpr library features #if FASTFLOAT_HAS_IS_CONSTANT_EVALUATED && FASTFLOAT_HAS_BIT_CAST && \ + defined(__cpp_lib_constexpr_algorithms) && \ __cpp_lib_constexpr_algorithms >= 201806L /*For std::copy and std::fill*/ #define FASTFLOAT_CONSTEXPR20 constexpr #define FASTFLOAT_IS_CONSTEXPR 1 @@ -144,14 +151,31 @@ #include #include #include +#include #include #include #ifdef __has_include -#if __has_include() && (__cplusplus > 202002L || _MSVC_LANG > 202002L) +#if __has_include() && (__cplusplus > 202002L || (defined(_MSVC_LANG) && (_MSVC_LANG > 202002L))) #include #endif #endif +#define FASTFLOAT_VERSION_MAJOR 8 +#define FASTFLOAT_VERSION_MINOR 0 +#define FASTFLOAT_VERSION_PATCH 2 + +#define FASTFLOAT_STRINGIZE_IMPL(x) #x +#define FASTFLOAT_STRINGIZE(x) FASTFLOAT_STRINGIZE_IMPL(x) + +#define FASTFLOAT_VERSION_STR \ + FASTFLOAT_STRINGIZE(FASTFLOAT_VERSION_MAJOR) \ + "." FASTFLOAT_STRINGIZE(FASTFLOAT_VERSION_MINOR) "." FASTFLOAT_STRINGIZE( \ + FASTFLOAT_VERSION_PATCH) + +#define FASTFLOAT_VERSION \ + (FASTFLOAT_VERSION_MAJOR * 10000 + FASTFLOAT_VERSION_MINOR * 100 + \ + FASTFLOAT_VERSION_PATCH) + namespace fast_float { enum class chars_format : uint64_t; @@ -180,6 +204,7 @@ template struct from_chars_result_t { UC const *ptr; std::errc ec; }; + using from_chars_result = from_chars_result_t; template struct parse_options_t { @@ -194,6 +219,7 @@ template struct parse_options_t { /** The base used for integers */ int base; }; + using parse_options = parse_options_t; } // namespace fast_float @@ -340,22 +366,45 @@ fastfloat_really_inline constexpr bool cpp20_and_in_constexpr() { } template -fastfloat_really_inline constexpr bool is_supported_float_type() { - return std::is_same::value || std::is_same::value -#if __STDCPP_FLOAT32_T__ - || std::is_same::value +struct is_supported_float_type + : std::integral_constant< + bool, std::is_same::value || std::is_same::value +#ifdef __STDCPP_FLOAT64_T__ + || std::is_same::value #endif -#if __STDCPP_FLOAT64_T__ - || std::is_same::value +#ifdef __STDCPP_FLOAT32_T__ + || std::is_same::value #endif - ; -} +#ifdef __STDCPP_FLOAT16_T__ + || std::is_same::value +#endif +#ifdef __STDCPP_BFLOAT16_T__ + || std::is_same::value +#endif + > { +}; + +template +using equiv_uint_t = typename std::conditional< + sizeof(T) == 1, uint8_t, + typename std::conditional< + sizeof(T) == 2, uint16_t, + typename std::conditional::type>::type>::type; + +template struct is_supported_integer_type : std::is_integral {}; template -fastfloat_really_inline constexpr bool is_supported_char_type() { - return std::is_same::value || std::is_same::value || - std::is_same::value || std::is_same::value; -} +struct is_supported_char_type + : std::integral_constant::value || + std::is_same::value || + std::is_same::value || + std::is_same::value +#ifdef __cpp_char8_t + || std::is_same::value +#endif + > { +}; // Compares two ASCII strings in a case insensitive manner. template @@ -377,9 +426,11 @@ fastfloat_strncasecmp(UC const *actual_mixedcase, UC const *expected_lowercase, // a pointer and a length to a contiguous block of memory template struct span { - const T *ptr; + T const *ptr; size_t length; - constexpr span(const T *_ptr, size_t _length) : ptr(_ptr), length(_length) {} + + constexpr span(T const *_ptr, size_t _length) : ptr(_ptr), length(_length) {} + constexpr span() : ptr(nullptr), length(0) {} constexpr size_t len() const noexcept { return length; } @@ -393,7 +444,9 @@ template struct span { struct value128 { uint64_t low; uint64_t high; + constexpr value128(uint64_t _low, uint64_t _high) : low(_low), high(_high) {} + constexpr value128() : low(0), high(0) {} }; @@ -509,10 +562,12 @@ struct adjusted_mantissa { uint64_t mantissa{0}; int32_t power2{0}; // a negative value indicates an invalid result adjusted_mantissa() = default; - constexpr bool operator==(const adjusted_mantissa &o) const { + + constexpr bool operator==(adjusted_mantissa const &o) const { return mantissa == o.mantissa && power2 == o.power2; } - constexpr bool operator!=(const adjusted_mantissa &o) const { + + constexpr bool operator!=(adjusted_mantissa const &o) const { return mantissa != o.mantissa || power2 != o.power2; } }; @@ -526,28 +581,27 @@ constexpr uint64_t constant_55555 = 5 * 5 * 5 * 5 * 5; template struct binary_format_lookup_tables; template struct binary_format : binary_format_lookup_tables { - using equiv_uint = - typename std::conditional::type; + using equiv_uint = equiv_uint_t; - static inline constexpr int mantissa_explicit_bits(); - static inline constexpr int minimum_exponent(); - static inline constexpr int infinite_power(); - static inline constexpr int sign_index(); - static inline constexpr int + static constexpr int mantissa_explicit_bits(); + static constexpr int minimum_exponent(); + static constexpr int infinite_power(); + static constexpr int sign_index(); + static constexpr int min_exponent_fast_path(); // used when fegetround() == FE_TONEAREST - static inline constexpr int max_exponent_fast_path(); - static inline constexpr int max_exponent_round_to_even(); - static inline constexpr int min_exponent_round_to_even(); - static inline constexpr uint64_t max_mantissa_fast_path(int64_t power); - static inline constexpr uint64_t + static constexpr int max_exponent_fast_path(); + static constexpr int max_exponent_round_to_even(); + static constexpr int min_exponent_round_to_even(); + static constexpr uint64_t max_mantissa_fast_path(int64_t power); + static constexpr uint64_t max_mantissa_fast_path(); // used when fegetround() == FE_TONEAREST - static inline constexpr int largest_power_of_ten(); - static inline constexpr int smallest_power_of_ten(); - static inline constexpr T exact_power_of_ten(int64_t power); - static inline constexpr size_t max_digits(); - static inline constexpr equiv_uint exponent_mask(); - static inline constexpr equiv_uint mantissa_mask(); - static inline constexpr equiv_uint hidden_bit_mask(); + static constexpr int largest_power_of_ten(); + static constexpr int smallest_power_of_ten(); + static constexpr T exact_power_of_ten(int64_t power); + static constexpr size_t max_digits(); + static constexpr equiv_uint exponent_mask(); + static constexpr equiv_uint mantissa_mask(); + static constexpr equiv_uint hidden_bit_mask(); }; template struct binary_format_lookup_tables { @@ -655,6 +709,7 @@ template <> inline constexpr int binary_format::mantissa_explicit_bits() { return 52; } + template <> inline constexpr int binary_format::mantissa_explicit_bits() { return 23; @@ -683,6 +738,7 @@ inline constexpr int binary_format::min_exponent_round_to_even() { template <> inline constexpr int binary_format::minimum_exponent() { return -1023; } + template <> inline constexpr int binary_format::minimum_exponent() { return -127; } @@ -690,6 +746,7 @@ template <> inline constexpr int binary_format::minimum_exponent() { template <> inline constexpr int binary_format::infinite_power() { return 0x7FF; } + template <> inline constexpr int binary_format::infinite_power() { return 0xFF; } @@ -697,6 +754,7 @@ template <> inline constexpr int binary_format::infinite_power() { template <> inline constexpr int binary_format::sign_index() { return 63; } + template <> inline constexpr int binary_format::sign_index() { return 31; } @@ -705,6 +763,7 @@ template <> inline constexpr int binary_format::max_exponent_fast_path() { return 22; } + template <> inline constexpr int binary_format::max_exponent_fast_path() { return 10; @@ -714,6 +773,261 @@ template <> inline constexpr uint64_t binary_format::max_mantissa_fast_path() { return uint64_t(2) << mantissa_explicit_bits(); } + +template <> +inline constexpr uint64_t binary_format::max_mantissa_fast_path() { + return uint64_t(2) << mantissa_explicit_bits(); +} + +// credit: Jakub Jelínek +#ifdef __STDCPP_FLOAT16_T__ +template struct binary_format_lookup_tables { + static constexpr std::float16_t powers_of_ten[] = {1e0f16, 1e1f16, 1e2f16, + 1e3f16, 1e4f16}; + + // Largest integer value v so that (5**index * v) <= 1<<11. + // 0x800 == 1<<11 + static constexpr uint64_t max_mantissa[] = {0x800, + 0x800 / 5, + 0x800 / (5 * 5), + 0x800 / (5 * 5 * 5), + 0x800 / (5 * 5 * 5 * 5), + 0x800 / (constant_55555)}; +}; + +#if FASTFLOAT_DETAIL_MUST_DEFINE_CONSTEXPR_VARIABLE + +template +constexpr std::float16_t + binary_format_lookup_tables::powers_of_ten[]; + +template +constexpr uint64_t + binary_format_lookup_tables::max_mantissa[]; + +#endif + +template <> +inline constexpr std::float16_t +binary_format::exact_power_of_ten(int64_t power) { + // Work around clang bug https://godbolt.org/z/zedh7rrhc + return (void)powers_of_ten[0], powers_of_ten[power]; +} + +template <> +inline constexpr binary_format::equiv_uint +binary_format::exponent_mask() { + return 0x7C00; +} + +template <> +inline constexpr binary_format::equiv_uint +binary_format::mantissa_mask() { + return 0x03FF; +} + +template <> +inline constexpr binary_format::equiv_uint +binary_format::hidden_bit_mask() { + return 0x0400; +} + +template <> +inline constexpr int binary_format::max_exponent_fast_path() { + return 4; +} + +template <> +inline constexpr int binary_format::mantissa_explicit_bits() { + return 10; +} + +template <> +inline constexpr uint64_t +binary_format::max_mantissa_fast_path() { + return uint64_t(2) << mantissa_explicit_bits(); +} + +template <> +inline constexpr uint64_t +binary_format::max_mantissa_fast_path(int64_t power) { + // caller is responsible to ensure that + // power >= 0 && power <= 4 + // + // Work around clang bug https://godbolt.org/z/zedh7rrhc + return (void)max_mantissa[0], max_mantissa[power]; +} + +template <> +inline constexpr int binary_format::min_exponent_fast_path() { + return 0; +} + +template <> +inline constexpr int +binary_format::max_exponent_round_to_even() { + return 5; +} + +template <> +inline constexpr int +binary_format::min_exponent_round_to_even() { + return -22; +} + +template <> +inline constexpr int binary_format::minimum_exponent() { + return -15; +} + +template <> +inline constexpr int binary_format::infinite_power() { + return 0x1F; +} + +template <> inline constexpr int binary_format::sign_index() { + return 15; +} + +template <> +inline constexpr int binary_format::largest_power_of_ten() { + return 4; +} + +template <> +inline constexpr int binary_format::smallest_power_of_ten() { + return -27; +} + +template <> +inline constexpr size_t binary_format::max_digits() { + return 22; +} +#endif // __STDCPP_FLOAT16_T__ + +// credit: Jakub Jelínek +#ifdef __STDCPP_BFLOAT16_T__ +template struct binary_format_lookup_tables { + static constexpr std::bfloat16_t powers_of_ten[] = {1e0bf16, 1e1bf16, 1e2bf16, + 1e3bf16}; + + // Largest integer value v so that (5**index * v) <= 1<<8. + // 0x100 == 1<<8 + static constexpr uint64_t max_mantissa[] = {0x100, 0x100 / 5, 0x100 / (5 * 5), + 0x100 / (5 * 5 * 5), + 0x100 / (5 * 5 * 5 * 5)}; +}; + +#if FASTFLOAT_DETAIL_MUST_DEFINE_CONSTEXPR_VARIABLE + +template +constexpr std::bfloat16_t + binary_format_lookup_tables::powers_of_ten[]; + +template +constexpr uint64_t + binary_format_lookup_tables::max_mantissa[]; + +#endif + +template <> +inline constexpr std::bfloat16_t +binary_format::exact_power_of_ten(int64_t power) { + // Work around clang bug https://godbolt.org/z/zedh7rrhc + return (void)powers_of_ten[0], powers_of_ten[power]; +} + +template <> +inline constexpr int binary_format::max_exponent_fast_path() { + return 3; +} + +template <> +inline constexpr binary_format::equiv_uint +binary_format::exponent_mask() { + return 0x7F80; +} + +template <> +inline constexpr binary_format::equiv_uint +binary_format::mantissa_mask() { + return 0x007F; +} + +template <> +inline constexpr binary_format::equiv_uint +binary_format::hidden_bit_mask() { + return 0x0080; +} + +template <> +inline constexpr int binary_format::mantissa_explicit_bits() { + return 7; +} + +template <> +inline constexpr uint64_t +binary_format::max_mantissa_fast_path() { + return uint64_t(2) << mantissa_explicit_bits(); +} + +template <> +inline constexpr uint64_t +binary_format::max_mantissa_fast_path(int64_t power) { + // caller is responsible to ensure that + // power >= 0 && power <= 3 + // + // Work around clang bug https://godbolt.org/z/zedh7rrhc + return (void)max_mantissa[0], max_mantissa[power]; +} + +template <> +inline constexpr int binary_format::min_exponent_fast_path() { + return 0; +} + +template <> +inline constexpr int +binary_format::max_exponent_round_to_even() { + return 3; +} + +template <> +inline constexpr int +binary_format::min_exponent_round_to_even() { + return -24; +} + +template <> +inline constexpr int binary_format::minimum_exponent() { + return -127; +} + +template <> +inline constexpr int binary_format::infinite_power() { + return 0xFF; +} + +template <> inline constexpr int binary_format::sign_index() { + return 15; +} + +template <> +inline constexpr int binary_format::largest_power_of_ten() { + return 38; +} + +template <> +inline constexpr int binary_format::smallest_power_of_ten() { + return -60; +} + +template <> +inline constexpr size_t binary_format::max_digits() { + return 98; +} +#endif // __STDCPP_BFLOAT16_T__ + template <> inline constexpr uint64_t binary_format::max_mantissa_fast_path(int64_t power) { @@ -723,10 +1037,7 @@ binary_format::max_mantissa_fast_path(int64_t power) { // Work around clang bug https://godbolt.org/z/zedh7rrhc return (void)max_mantissa[0], max_mantissa[power]; } -template <> -inline constexpr uint64_t binary_format::max_mantissa_fast_path() { - return uint64_t(2) << mantissa_explicit_bits(); -} + template <> inline constexpr uint64_t binary_format::max_mantissa_fast_path(int64_t power) { @@ -743,6 +1054,7 @@ binary_format::exact_power_of_ten(int64_t power) { // Work around clang bug https://godbolt.org/z/zedh7rrhc return (void)powers_of_ten[0], powers_of_ten[power]; } + template <> inline constexpr float binary_format::exact_power_of_ten(int64_t power) { // Work around clang bug https://godbolt.org/z/zedh7rrhc @@ -752,6 +1064,7 @@ inline constexpr float binary_format::exact_power_of_ten(int64_t power) { template <> inline constexpr int binary_format::largest_power_of_ten() { return 308; } + template <> inline constexpr int binary_format::largest_power_of_ten() { return 38; } @@ -760,6 +1073,7 @@ template <> inline constexpr int binary_format::smallest_power_of_ten() { return -342; } + template <> inline constexpr int binary_format::smallest_power_of_ten() { return -64; } @@ -767,6 +1081,7 @@ template <> inline constexpr int binary_format::smallest_power_of_ten() { template <> inline constexpr size_t binary_format::max_digits() { return 769; } + template <> inline constexpr size_t binary_format::max_digits() { return 114; } @@ -776,6 +1091,7 @@ inline constexpr binary_format::equiv_uint binary_format::exponent_mask() { return 0x7F800000; } + template <> inline constexpr binary_format::equiv_uint binary_format::exponent_mask() { @@ -787,6 +1103,7 @@ inline constexpr binary_format::equiv_uint binary_format::mantissa_mask() { return 0x007FFFFF; } + template <> inline constexpr binary_format::equiv_uint binary_format::mantissa_mask() { @@ -798,6 +1115,7 @@ inline constexpr binary_format::equiv_uint binary_format::hidden_bit_mask() { return 0x00800000; } + template <> inline constexpr binary_format::equiv_uint binary_format::hidden_bit_mask() { @@ -807,11 +1125,12 @@ binary_format::hidden_bit_mask() { template fastfloat_really_inline FASTFLOAT_CONSTEXPR20 void to_float(bool negative, adjusted_mantissa am, T &value) { - using fastfloat_uint = typename binary_format::equiv_uint; - fastfloat_uint word = (fastfloat_uint)am.mantissa; - word |= fastfloat_uint(am.power2) - << binary_format::mantissa_explicit_bits(); - word |= fastfloat_uint(negative) << binary_format::sign_index(); + using equiv_uint = equiv_uint_t; + equiv_uint word = equiv_uint(am.mantissa); + word = equiv_uint(word | equiv_uint(am.power2) + << binary_format::mantissa_explicit_bits()); + word = + equiv_uint(word | equiv_uint(negative) << binary_format::sign_index()); #if FASTFLOAT_HAS_BIT_CAST value = std::bit_cast(word); #else @@ -853,34 +1172,53 @@ template static constexpr uint64_t int_cmp_zeros() { uint64_t(UC('0')) << 16 | UC('0')) : (uint64_t(UC('0')) << 32 | UC('0')); } + template static constexpr int int_cmp_len() { return sizeof(uint64_t) / sizeof(UC); } -template static constexpr UC const *str_const_nan() { - return nullptr; -} + +template constexpr UC const *str_const_nan(); + template <> constexpr char const *str_const_nan() { return "nan"; } + template <> constexpr wchar_t const *str_const_nan() { return L"nan"; } + template <> constexpr char16_t const *str_const_nan() { return u"nan"; } + template <> constexpr char32_t const *str_const_nan() { return U"nan"; } -template static constexpr UC const *str_const_inf() { - return nullptr; + +#ifdef __cpp_char8_t +template <> constexpr char8_t const *str_const_nan() { + return u8"nan"; } +#endif + +template constexpr UC const *str_const_inf(); + template <> constexpr char const *str_const_inf() { return "infinity"; } + template <> constexpr wchar_t const *str_const_inf() { return L"infinity"; } + template <> constexpr char16_t const *str_const_inf() { return u"infinity"; } + template <> constexpr char32_t const *str_const_inf() { return U"infinity"; } +#ifdef __cpp_char8_t +template <> constexpr char8_t const *str_const_inf() { + return u8"infinity"; +} +#endif + template struct int_luts { static constexpr uint8_t chdigit[] = { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, @@ -946,6 +1284,50 @@ fastfloat_really_inline constexpr uint64_t min_safe_u64(int base) { return int_luts<>::min_safe_u64[base - 2]; } +static_assert(std::is_same, uint64_t>::value, + "equiv_uint should be uint64_t for double"); +static_assert(std::numeric_limits::is_iec559, + "double must fulfill the requirements of IEC 559 (IEEE 754)"); + +static_assert(std::is_same, uint32_t>::value, + "equiv_uint should be uint32_t for float"); +static_assert(std::numeric_limits::is_iec559, + "float must fulfill the requirements of IEC 559 (IEEE 754)"); + +#ifdef __STDCPP_FLOAT64_T__ +static_assert(std::is_same, uint64_t>::value, + "equiv_uint should be uint64_t for std::float64_t"); +static_assert( + std::numeric_limits::is_iec559, + "std::float64_t must fulfill the requirements of IEC 559 (IEEE 754)"); +#endif // __STDCPP_FLOAT64_T__ + +#ifdef __STDCPP_FLOAT32_T__ +static_assert(std::is_same, uint32_t>::value, + "equiv_uint should be uint32_t for std::float32_t"); +static_assert( + std::numeric_limits::is_iec559, + "std::float32_t must fulfill the requirements of IEC 559 (IEEE 754)"); +#endif // __STDCPP_FLOAT32_T__ + +#ifdef __STDCPP_FLOAT16_T__ +static_assert( + std::is_same::equiv_uint, uint16_t>::value, + "equiv_uint should be uint16_t for std::float16_t"); +static_assert( + std::numeric_limits::is_iec559, + "std::float16_t must fulfill the requirements of IEC 559 (IEEE 754)"); +#endif // __STDCPP_FLOAT16_T__ + +#ifdef __STDCPP_BFLOAT16_T__ +static_assert( + std::is_same::equiv_uint, uint16_t>::value, + "equiv_uint should be uint16_t for std::bfloat16_t"); +static_assert( + std::numeric_limits::is_iec559, + "std::bfloat16_t must fulfill the requirements of IEC 559 (IEEE 754)"); +#endif // __STDCPP_BFLOAT16_T__ + constexpr chars_format operator~(chars_format rhs) noexcept { using int_type = std::underlying_type::type; return static_cast(~static_cast(rhs)); @@ -1034,7 +1416,7 @@ namespace fast_float { * `scientific`. */ template ())> + typename = FASTFLOAT_ENABLE_IF(is_supported_float_type::value)> FASTFLOAT_CONSTEXPR20 from_chars_result_t from_chars(UC const *first, UC const *last, T &value, chars_format fmt = chars_format::general) noexcept; @@ -1052,11 +1434,12 @@ from_chars_advanced(UC const *first, UC const *last, T &value, * from_chars for integer types. */ template ())> + typename = FASTFLOAT_ENABLE_IF(is_supported_integer_type::value)> FASTFLOAT_CONSTEXPR20 from_chars_result_t from_chars(UC const *first, UC const *last, T &value, int base = 10) noexcept; } // namespace fast_float + #endif // FASTFLOAT_FAST_FLOAT_H #ifndef FASTFLOAT_ASCII_NUMBER_H @@ -1105,7 +1488,7 @@ fastfloat_really_inline constexpr uint64_t byteswap(uint64_t val) { // Read 8 UC into a u64. Truncates UC if not char. template fastfloat_really_inline FASTFLOAT_CONSTEXPR20 uint64_t -read8_to_u64(const UC *chars) { +read8_to_u64(UC const *chars) { if (cpp20_and_in_constexpr() || !std::is_same::value) { uint64_t val = 0; for (int i = 0; i < 8; ++i) { @@ -1125,9 +1508,9 @@ read8_to_u64(const UC *chars) { #ifdef FASTFLOAT_SSE2 -fastfloat_really_inline uint64_t simd_read8_to_u64(const __m128i data) { +fastfloat_really_inline uint64_t simd_read8_to_u64(__m128i const data) { FASTFLOAT_SIMD_DISABLE_WARNINGS - const __m128i packed = _mm_packus_epi16(data, data); + __m128i const packed = _mm_packus_epi16(data, data); #ifdef FASTFLOAT_64BIT return uint64_t(_mm_cvtsi128_si64(packed)); #else @@ -1139,26 +1522,26 @@ fastfloat_really_inline uint64_t simd_read8_to_u64(const __m128i data) { FASTFLOAT_SIMD_RESTORE_WARNINGS } -fastfloat_really_inline uint64_t simd_read8_to_u64(const char16_t *chars) { +fastfloat_really_inline uint64_t simd_read8_to_u64(char16_t const *chars) { FASTFLOAT_SIMD_DISABLE_WARNINGS return simd_read8_to_u64( - _mm_loadu_si128(reinterpret_cast(chars))); + _mm_loadu_si128(reinterpret_cast<__m128i const *>(chars))); FASTFLOAT_SIMD_RESTORE_WARNINGS } #elif defined(FASTFLOAT_NEON) -fastfloat_really_inline uint64_t simd_read8_to_u64(const uint16x8_t data) { +fastfloat_really_inline uint64_t simd_read8_to_u64(uint16x8_t const data) { FASTFLOAT_SIMD_DISABLE_WARNINGS uint8x8_t utf8_packed = vmovn_u16(data); return vget_lane_u64(vreinterpret_u64_u8(utf8_packed), 0); FASTFLOAT_SIMD_RESTORE_WARNINGS } -fastfloat_really_inline uint64_t simd_read8_to_u64(const char16_t *chars) { +fastfloat_really_inline uint64_t simd_read8_to_u64(char16_t const *chars) { FASTFLOAT_SIMD_DISABLE_WARNINGS return simd_read8_to_u64( - vld1q_u16(reinterpret_cast(chars))); + vld1q_u16(reinterpret_cast(chars))); FASTFLOAT_SIMD_RESTORE_WARNINGS } @@ -1178,9 +1561,9 @@ uint64_t simd_read8_to_u64(UC const *) { // credit @aqrit fastfloat_really_inline FASTFLOAT_CONSTEXPR14 uint32_t parse_eight_digits_unrolled(uint64_t val) { - const uint64_t mask = 0x000000FF000000FF; - const uint64_t mul1 = 0x000F424000000064; // 100 + (1000000ULL << 32) - const uint64_t mul2 = 0x0000271000000001; // 1 + (10000ULL << 32) + uint64_t const mask = 0x000000FF000000FF; + uint64_t const mul1 = 0x000F424000000064; // 100 + (1000000ULL << 32) + uint64_t const mul2 = 0x0000271000000001; // 1 + (10000ULL << 32) val -= 0x3030303030303030; val = (val * 10) + (val >> 8); // val = (val * 2561) >> 8; val = (((val & mask) * mul1) + (((val >> 16) & mask) * mul2)) >> 32; @@ -1210,20 +1593,20 @@ is_made_of_eight_digits_fast(uint64_t val) noexcept { // Using this style (instead of is_made_of_eight_digits_fast() then // parse_eight_digits_unrolled()) ensures we don't load SIMD registers twice. fastfloat_really_inline FASTFLOAT_CONSTEXPR20 bool -simd_parse_if_eight_digits_unrolled(const char16_t *chars, +simd_parse_if_eight_digits_unrolled(char16_t const *chars, uint64_t &i) noexcept { if (cpp20_and_in_constexpr()) { return false; } #ifdef FASTFLOAT_SSE2 FASTFLOAT_SIMD_DISABLE_WARNINGS - const __m128i data = - _mm_loadu_si128(reinterpret_cast(chars)); + __m128i const data = + _mm_loadu_si128(reinterpret_cast<__m128i const *>(chars)); // (x - '0') <= 9 // http://0x80.pl/articles/simd-parsing-int-sequences.html - const __m128i t0 = _mm_add_epi16(data, _mm_set1_epi16(32720)); - const __m128i t1 = _mm_cmpgt_epi16(t0, _mm_set1_epi16(-32759)); + __m128i const t0 = _mm_add_epi16(data, _mm_set1_epi16(32720)); + __m128i const t1 = _mm_cmpgt_epi16(t0, _mm_set1_epi16(-32759)); if (_mm_movemask_epi8(t1) == 0) { i = i * 100000000 + parse_eight_digits_unrolled(simd_read8_to_u64(data)); @@ -1233,12 +1616,12 @@ simd_parse_if_eight_digits_unrolled(const char16_t *chars, FASTFLOAT_SIMD_RESTORE_WARNINGS #elif defined(FASTFLOAT_NEON) FASTFLOAT_SIMD_DISABLE_WARNINGS - const uint16x8_t data = vld1q_u16(reinterpret_cast(chars)); + uint16x8_t const data = vld1q_u16(reinterpret_cast(chars)); // (x - '0') <= 9 // http://0x80.pl/articles/simd-parsing-int-sequences.html - const uint16x8_t t0 = vsubq_u16(data, vmovq_n_u16('0')); - const uint16x8_t mask = vcltq_u16(t0, vmovq_n_u16('9' - '0' + 1)); + uint16x8_t const t0 = vsubq_u16(data, vmovq_n_u16('0')); + uint16x8_t const mask = vcltq_u16(t0, vmovq_n_u16('9' - '0' + 1)); if (vminvq_u16(mask) == 0xFFFF) { i = i * 100000000 + parse_eight_digits_unrolled(simd_read8_to_u64(data)); @@ -1268,7 +1651,7 @@ bool simd_parse_if_eight_digits_unrolled(UC const *, uint64_t &) { template ::value) = 0> fastfloat_really_inline FASTFLOAT_CONSTEXPR20 void -loop_parse_if_eight_digits(const UC *&p, const UC *const pend, uint64_t &i) { +loop_parse_if_eight_digits(UC const *&p, UC const *const pend, uint64_t &i) { if (!has_simd_opt()) { return; } @@ -1280,7 +1663,7 @@ loop_parse_if_eight_digits(const UC *&p, const UC *const pend, uint64_t &i) { } fastfloat_really_inline FASTFLOAT_CONSTEXPR20 void -loop_parse_if_eight_digits(const char *&p, const char *const pend, +loop_parse_if_eight_digits(char const *&p, char const *const pend, uint64_t &i) { // optimizes better than parse_if_eight_digits_unrolled() for UC = char. while ((std::distance(p, pend) >= 8) && @@ -1319,12 +1702,12 @@ template struct parsed_number_string_t { bool valid{false}; bool too_many_digits{false}; // contains the range of the significant digits - span integer{}; // non-nullable - span fraction{}; // nullable + span integer{}; // non-nullable + span fraction{}; // nullable parse_error error{parse_error::no_error}; }; -using byte_span = span; +using byte_span = span; using parsed_number_string = parsed_number_string_t; template @@ -1339,7 +1722,7 @@ report_parse_error(UC const *p, parse_error error) { // Assuming that you use no more than 19 digits, this will // parse an ASCII string. -template +template fastfloat_really_inline FASTFLOAT_CONSTEXPR20 parsed_number_string_t parse_number_string(UC const *p, UC const *pend, parse_options_t options) noexcept { @@ -1352,20 +1735,20 @@ parse_number_string(UC const *p, UC const *pend, // assume p < pend, so dereference without checks; answer.negative = (*p == UC('-')); // C++17 20.19.3.(7.1) explicitly forbids '+' sign here - if ((*p == UC('-')) || - (uint64_t(fmt & chars_format::allow_leading_plus) && - !uint64_t(fmt & detail::basic_json_fmt) && *p == UC('+'))) { + if ((*p == UC('-')) || (uint64_t(fmt & chars_format::allow_leading_plus) && + !basic_json_fmt && *p == UC('+'))) { ++p; if (p == pend) { return report_parse_error( p, parse_error::missing_integer_or_dot_after_sign); } - if (uint64_t(fmt & detail::basic_json_fmt)) { + FASTFLOAT_IF_CONSTEXPR17(basic_json_fmt) { if (!is_integer(*p)) { // a sign must be followed by an integer return report_parse_error(p, parse_error::missing_integer_after_sign); } - } else { + } + else { if (!is_integer(*p) && (*p != decimal_point)) { // a sign must be followed by an integer or the dot @@ -1388,8 +1771,8 @@ parse_number_string(UC const *p, UC const *pend, } UC const *const end_of_integer_part = p; int64_t digit_count = int64_t(end_of_integer_part - start_digits); - answer.integer = span(start_digits, size_t(digit_count)); - if (uint64_t(fmt & detail::basic_json_fmt)) { + answer.integer = span(start_digits, size_t(digit_count)); + FASTFLOAT_IF_CONSTEXPR17(basic_json_fmt) { // at least 1 digit in integer part, without leading zeros if (digit_count == 0) { return report_parse_error(p, parse_error::no_digits_in_integer_part); @@ -1401,7 +1784,7 @@ parse_number_string(UC const *p, UC const *pend, } int64_t exponent = 0; - const bool has_decimal_point = (p != pend) && (*p == decimal_point); + bool const has_decimal_point = (p != pend) && (*p == decimal_point); if (has_decimal_point) { ++p; UC const *before = p; @@ -1415,17 +1798,17 @@ parse_number_string(UC const *p, UC const *pend, i = i * 10 + digit; // in rare cases, this will overflow, but that's ok } exponent = before - p; - answer.fraction = span(before, size_t(p - before)); + answer.fraction = span(before, size_t(p - before)); digit_count -= exponent; } - if (uint64_t(fmt & detail::basic_json_fmt)) { + FASTFLOAT_IF_CONSTEXPR17(basic_json_fmt) { // at least 1 digit in fractional part if (has_decimal_point && exponent == 0) { return report_parse_error(p, parse_error::no_digits_in_fractional_part); } - } else if (digit_count == - 0) { // we must have encountered at least one integer! + } + else if (digit_count == 0) { // we must have encountered at least one integer! return report_parse_error(p, parse_error::no_digits_in_mantissa); } int64_t exp_number = 0; // explicit exponential part @@ -1506,7 +1889,7 @@ parse_number_string(UC const *p, UC const *pend, i = 0; p = answer.integer.ptr; UC const *int_end = p + answer.integer.len(); - const uint64_t minimal_nineteen_digit_integer{1000000000000000000}; + uint64_t const minimal_nineteen_digit_integer{1000000000000000000}; while ((i < minimal_nineteen_digit_integer) && (p != int_end)) { i = i * 10 + uint64_t(*p - UC('0')); ++p; @@ -1542,7 +1925,14 @@ parse_int_string(UC const *p, UC const *pend, T &value, UC const *const first = p; bool const negative = (*p == UC('-')); +#ifdef FASTFLOAT_VISUAL_STUDIO +#pragma warning(push) +#pragma warning(disable : 4127) +#endif if (!std::is_signed::value && negative) { +#ifdef FASTFLOAT_VISUAL_STUDIO +#pragma warning(pop) +#endif answer.ec = std::errc::invalid_argument; answer.ptr = first; return answer; @@ -1558,7 +1948,7 @@ parse_int_string(UC const *p, UC const *pend, T &value, ++p; } - const bool has_leading_zeros = p > start_num; + bool const has_leading_zeros = p > start_num; UC const *const start_digits = p; @@ -2369,7 +2759,7 @@ namespace fast_float { template fastfloat_really_inline FASTFLOAT_CONSTEXPR20 value128 compute_product_approximation(int64_t q, uint64_t w) { - const int index = 2 * int(q - powers::smallest_power_of_five); + int const index = 2 * int(q - powers::smallest_power_of_five); // For small values of q, e.g., q in [0,27], the answer is always exact // because The line value128 firstproduct = full_multiplication(w, // power_of_five_128[index]); gives the exact answer. @@ -2442,8 +2832,8 @@ compute_error(int64_t q, uint64_t w) noexcept { return compute_error_scaled(q, product.high, lz); } -// w * 10 ** q -// The returned value should be a valid ieee64 number that simply need to be +// Computers w * 10 ** q. +// The returned value should be a valid number that simply needs to be // packed. However, in some very rare cases, the computation will fail. In such // cases, we return an adjusted_mantissa with a negative power of 2: the caller // should recompute in such cases. @@ -2507,7 +2897,8 @@ compute_float(int64_t q, uint64_t w) noexcept { // next line is safe because -answer.power2 + 1 < 64 answer.mantissa >>= -answer.power2 + 1; // Thankfully, we can't have both "round-to-even" and subnormals because - // "round-to-even" only occurs for powers close to 0. + // "round-to-even" only occurs for powers close to 0 in the 32-bit and + // and 64-bit case (with no more than 19 digits). answer.mantissa += (answer.mantissa & 1); // round up answer.mantissa >>= 1; // There is a weird scenario where we don't have a subnormal but just. @@ -2603,8 +2994,8 @@ template struct stackvec { uint16_t length{0}; stackvec() = default; - stackvec(const stackvec &) = delete; - stackvec &operator=(const stackvec &) = delete; + stackvec(stackvec const &) = delete; + stackvec &operator=(stackvec const &) = delete; stackvec(stackvec &&) = delete; stackvec &operator=(stackvec &&other) = delete; @@ -2617,10 +3008,12 @@ template struct stackvec { FASTFLOAT_DEBUG_ASSERT(index < length); return data[index]; } + FASTFLOAT_CONSTEXPR14 const limb &operator[](size_t index) const noexcept { FASTFLOAT_DEBUG_ASSERT(index < length); return data[index]; } + // index from the end of the container FASTFLOAT_CONSTEXPR14 const limb &rindex(size_t index) const noexcept { FASTFLOAT_DEBUG_ASSERT(index < length); @@ -2632,14 +3025,19 @@ template struct stackvec { FASTFLOAT_CONSTEXPR14 void set_len(size_t len) noexcept { length = uint16_t(len); } + constexpr size_t len() const noexcept { return length; } + constexpr bool is_empty() const noexcept { return length == 0; } + constexpr size_t capacity() const noexcept { return size; } + // append item to vector, without bounds checking FASTFLOAT_CONSTEXPR14 void push_unchecked(limb value) noexcept { data[length] = value; length++; } + // append item to vector, returning if item was added FASTFLOAT_CONSTEXPR14 bool try_push(limb value) noexcept { if (len() < capacity()) { @@ -2649,12 +3047,14 @@ template struct stackvec { return false; } } + // add items to the vector, from a span, without bounds checking FASTFLOAT_CONSTEXPR20 void extend_unchecked(limb_span s) noexcept { limb *ptr = data + length; std::copy_n(s.ptr, s.len(), ptr); set_len(len() + s.len()); } + // try to add items to the vector, returning if items were added FASTFLOAT_CONSTEXPR20 bool try_extend(limb_span s) noexcept { if (len() + s.len() <= capacity()) { @@ -2664,6 +3064,7 @@ template struct stackvec { return false; } } + // resize the vector, without bounds checking // if the new size is longer than the vector, assign value to each // appended item. @@ -2679,6 +3080,7 @@ template struct stackvec { set_len(new_len); } } + // try to resize the vector, returning if the vector was resized. FASTFLOAT_CONSTEXPR20 bool try_resize(size_t new_len, limb value) noexcept { if (new_len > capacity()) { @@ -2688,6 +3090,7 @@ template struct stackvec { return true; } } + // check if any limbs are non-zero after the given index. // this needs to be done in reverse order, since the index // is relative to the most significant limbs. @@ -2700,6 +3103,7 @@ template struct stackvec { } return false; } + // normalize the big integer, so most-significant zero limbs are removed. FASTFLOAT_CONSTEXPR14 void normalize() noexcept { while (len() > 0 && rindex(0) == 0) { @@ -2983,8 +3387,9 @@ struct bigint : pow5_tables<> { stackvec vec; FASTFLOAT_CONSTEXPR20 bigint() : vec() {} - bigint(const bigint &) = delete; - bigint &operator=(const bigint &) = delete; + + bigint(bigint const &) = delete; + bigint &operator=(bigint const &) = delete; bigint(bigint &&) = delete; bigint &operator=(bigint &&other) = delete; @@ -3033,7 +3438,7 @@ struct bigint : pow5_tables<> { // positive, this is larger, otherwise they are equal. // the limbs are stored in little-endian order, so we // must compare the limbs in ever order. - FASTFLOAT_CONSTEXPR20 int compare(const bigint &other) const noexcept { + FASTFLOAT_CONSTEXPR20 int compare(bigint const &other) const noexcept { if (vec.len() > other.vec.len()) { return 1; } else if (vec.len() < other.vec.len()) { @@ -3087,7 +3492,7 @@ struct bigint : pow5_tables<> { } else if (!vec.is_empty()) { // move limbs limb *dst = vec.data + n; - const limb *src = vec.data; + limb const *src = vec.data; std::copy_backward(src, src + vec.len(), dst + vec.len()); // fill in empty limbs limb *first = vec.data; @@ -3244,7 +3649,7 @@ scientific_exponent(parsed_number_string_t &num) noexcept { template fastfloat_really_inline FASTFLOAT_CONSTEXPR20 adjusted_mantissa to_extended(T value) noexcept { - using equiv_uint = typename binary_format::equiv_uint; + using equiv_uint = equiv_uint_t; constexpr equiv_uint exponent_mask = binary_format::exponent_mask(); constexpr equiv_uint mantissa_mask = binary_format::mantissa_mask(); constexpr equiv_uint hidden_bit_mask = binary_format::hidden_bit_mask(); @@ -3325,8 +3730,8 @@ template fastfloat_really_inline FASTFLOAT_CONSTEXPR14 void round_nearest_tie_even(adjusted_mantissa &am, int32_t shift, callback cb) noexcept { - const uint64_t mask = (shift == 64) ? UINT64_MAX : (uint64_t(1) << shift) - 1; - const uint64_t halfway = (shift == 0) ? 0 : uint64_t(1) << (shift - 1); + uint64_t const mask = (shift == 64) ? UINT64_MAX : (uint64_t(1) << shift) - 1; + uint64_t const halfway = (shift == 0) ? 0 : uint64_t(1) << (shift - 1); uint64_t truncated_bits = am.mantissa & mask; bool is_above = truncated_bits > halfway; bool is_halfway = truncated_bits == halfway; @@ -3352,6 +3757,7 @@ round_down(adjusted_mantissa &am, int32_t shift) noexcept { } am.power2 += shift; } + template fastfloat_really_inline FASTFLOAT_CONSTEXPR20 void skip_zeros(UC const *&first, UC const *last) noexcept { @@ -3395,15 +3801,16 @@ is_truncated(UC const *first, UC const *last) noexcept { } return false; } + template fastfloat_really_inline FASTFLOAT_CONSTEXPR20 bool -is_truncated(span s) noexcept { +is_truncated(span s) noexcept { return is_truncated(s.ptr, s.ptr + s.len()); } template fastfloat_really_inline FASTFLOAT_CONSTEXPR20 void -parse_eight_digits(const UC *&p, limb &value, size_t &counter, +parse_eight_digits(UC const *&p, limb &value, size_t &counter, size_t &count) noexcept { value = value * 100000000 + parse_eight_digits_unrolled(p); p += 8; @@ -3644,6 +4051,7 @@ digit_comp(parsed_number_string_t &num, adjusted_mantissa am) noexcept { #include #include #include + namespace fast_float { namespace detail { @@ -3729,7 +4137,7 @@ fastfloat_really_inline bool rounds_to_nearest() noexcept { // asm). The value does not need to be std::numeric_limits::min(), any // small value so that 1 + x should round to 1 would do (after accounting for // excess precision, as in 387 instructions). - static volatile float fmin = std::numeric_limits::min(); + static float volatile fmin = std::numeric_limits::min(); float fmini = fmin; // we copy it so that it gets loaded at most once. // // Explanation: @@ -3779,7 +4187,7 @@ template struct from_chars_caller { } }; -#if __STDCPP_FLOAT32_T__ == 1 +#ifdef __STDCPP_FLOAT32_T__ template <> struct from_chars_caller { template FASTFLOAT_CONSTEXPR20 static from_chars_result_t @@ -3796,7 +4204,7 @@ template <> struct from_chars_caller { }; #endif -#if __STDCPP_FLOAT64_T__ == 1 +#ifdef __STDCPP_FLOAT64_T__ template <> struct from_chars_caller { template FASTFLOAT_CONSTEXPR20 static from_chars_result_t @@ -3830,9 +4238,9 @@ template FASTFLOAT_CONSTEXPR20 from_chars_result_t from_chars_advanced(parsed_number_string_t &pns, T &value) noexcept { - static_assert(is_supported_float_type(), + static_assert(is_supported_float_type::value, "only some floating-point types are supported"); - static_assert(is_supported_char_type(), + static_assert(is_supported_char_type::value, "only char, wchar_t, char16_t and char32_t are supported"); from_chars_result_t answer; @@ -3919,9 +4327,9 @@ FASTFLOAT_CONSTEXPR20 from_chars_result_t from_chars_float_advanced(UC const *first, UC const *last, T &value, parse_options_t options) noexcept { - static_assert(is_supported_float_type(), + static_assert(is_supported_float_type::value, "only some floating-point types are supported"); - static_assert(is_supported_char_type(), + static_assert(is_supported_char_type::value, "only char, wchar_t, char16_t and char32_t are supported"); chars_format const fmt = detail::adjust_for_feature_macros(options.format); @@ -3938,7 +4346,9 @@ from_chars_float_advanced(UC const *first, UC const *last, T &value, return answer; } parsed_number_string_t pns = - parse_number_string(first, last, options); + uint64_t(fmt & detail::basic_json_fmt) + ? parse_number_string(first, last, options) + : parse_number_string(first, last, options); if (!pns.valid) { if (uint64_t(fmt & chars_format::no_infnan)) { answer.ec = std::errc::invalid_argument; @@ -3957,8 +4367,9 @@ template FASTFLOAT_CONSTEXPR20 from_chars_result_t from_chars(UC const *first, UC const *last, T &value, int base) noexcept { - static_assert(std::is_integral::value, "only integer types are supported"); - static_assert(is_supported_char_type(), + static_assert(is_supported_integer_type::value, + "only integer types are supported"); + static_assert(is_supported_char_type::value, "only char, wchar_t, char16_t and char32_t are supported"); parse_options_t options; @@ -3971,8 +4382,9 @@ FASTFLOAT_CONSTEXPR20 from_chars_result_t from_chars_int_advanced(UC const *first, UC const *last, T &value, parse_options_t options) noexcept { - static_assert(std::is_integral::value, "only integer types are supported"); - static_assert(is_supported_char_type(), + static_assert(is_supported_integer_type::value, + "only integer types are supported"); + static_assert(is_supported_char_type::value, "only char, wchar_t, char16_t and char32_t are supported"); chars_format const fmt = detail::adjust_for_feature_macros(options.format); @@ -3993,7 +4405,11 @@ from_chars_int_advanced(UC const *first, UC const *last, T &value, return parse_int_string(first, last, value, options); } -template struct from_chars_advanced_caller { +template struct from_chars_advanced_caller { + static_assert(TypeIx > 0, "unsupported type"); +}; + +template <> struct from_chars_advanced_caller<1> { template FASTFLOAT_CONSTEXPR20 static from_chars_result_t call(UC const *first, UC const *last, T &value, @@ -4002,7 +4418,7 @@ template struct from_chars_advanced_caller { } }; -template <> struct from_chars_advanced_caller { +template <> struct from_chars_advanced_caller<2> { template FASTFLOAT_CONSTEXPR20 static from_chars_result_t call(UC const *first, UC const *last, T &value, @@ -4015,8 +4431,10 @@ template FASTFLOAT_CONSTEXPR20 from_chars_result_t from_chars_advanced(UC const *first, UC const *last, T &value, parse_options_t options) noexcept { - return from_chars_advanced_caller()>::call( - first, last, value, options); + return from_chars_advanced_caller< + size_t(is_supported_float_type::value) + + 2 * size_t(is_supported_integer_type::value)>::call(first, last, value, + options); } } // namespace fast_float