From 7ae62ee0d52675e9c853aeded4ede8a32f866615 Mon Sep 17 00:00:00 2001 From: Pavel Novikov Date: Sat, 6 Sep 2025 02:10:52 +0300 Subject: [PATCH] finally got the anti-ambiguity overloads right? --- include/fast_float/parse_number.h | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/include/fast_float/parse_number.h b/include/fast_float/parse_number.h index 71989f6..d2b2aaf 100644 --- a/include/fast_float/parse_number.h +++ b/include/fast_float/parse_number.h @@ -373,25 +373,17 @@ integer_times_pow10(int64_t mantissa, int decimal_exponent) noexcept { // the following overloads are here to avoid surprising ambiguity for int, // unsigned, etc. -#if !defined(_MSC_VER) -FASTFLOAT_CONSTEXPR20 inline double -integer_times_pow10(unsigned long long mantissa, - int decimal_exponent) noexcept { +template +FASTFLOAT_CONSTEXPR20 inline std::enable_if_t< + std::is_integral::value && !std::is_signed::value, double> +integer_times_pow10(Int mantissa, int decimal_exponent) noexcept { return integer_times_pow10(static_cast(mantissa), decimal_exponent); } -FASTFLOAT_CONSTEXPR20 inline double -integer_times_pow10(long long mantissa, int decimal_exponent) noexcept { - return integer_times_pow10(static_cast(mantissa), decimal_exponent); -} -#endif -FASTFLOAT_CONSTEXPR20 inline double -integer_times_pow10(unsigned mantissa, int decimal_exponent) noexcept { - return integer_times_pow10(static_cast(mantissa), decimal_exponent); -} - -FASTFLOAT_CONSTEXPR20 inline double -integer_times_pow10(int mantissa, int decimal_exponent) noexcept { +template +FASTFLOAT_CONSTEXPR20 inline std::enable_if_t< + std::is_integral::value && std::is_signed::value, double> +integer_times_pow10(Int mantissa, int decimal_exponent) noexcept { return integer_times_pow10(static_cast(mantissa), decimal_exponent); }