finally got the anti-ambiguity overloads right?

This commit is contained in:
Pavel Novikov 2025-09-06 02:10:52 +03:00
parent e12463583f
commit 7ae62ee0d5
No known key found for this signature in database
GPG Key ID: F2C305CAE4167D14

View File

@ -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 <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(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 {
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);
}