Skip to content
Prev Previous commit
Next Next commit
finally got the anti-ambiguity overloads right?
  • Loading branch information
toughengineer committed Sep 5, 2025
commit 7ae62ee0d52675e9c853aeded4ede8a32f866615
24 changes: 8 additions & 16 deletions include/fast_float/parse_number.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
return integer_times_pow10(static_cast<uint64_t>(mantissa), decimal_exponent);
}

FASTFLOAT_CONSTEXPR20 inline double
integer_times_pow10(long long mantissa, int decimal_exponent) noexcept {
return integer_times_pow10(static_cast<int64_t>(mantissa), decimal_exponent);
}
#endif
FASTFLOAT_CONSTEXPR20 inline double
integer_times_pow10(unsigned mantissa, int decimal_exponent) noexcept {
template <typename Int>
FASTFLOAT_CONSTEXPR20 inline std::enable_if_t<
std::is_integral<Int>::value && !std::is_signed<Int>::value, double>
integer_times_pow10(Int mantissa, int decimal_exponent) noexcept {
return integer_times_pow10(static_cast<uint64_t>(mantissa), decimal_exponent);
}

FASTFLOAT_CONSTEXPR20 inline double
integer_times_pow10(int mantissa, int decimal_exponent) noexcept {
template <typename Int>
FASTFLOAT_CONSTEXPR20 inline std::enable_if_t<
std::is_integral<Int>::value && std::is_signed<Int>::value, double>
integer_times_pow10(Int mantissa, int decimal_exponent) noexcept {
return integer_times_pow10(static_cast<int64_t>(mantissa), decimal_exponent);
}

Expand Down