From e30efa75f810f2d8b530b4d6581540982774a756 Mon Sep 17 00:00:00 2001 From: Stepan Ponomarev Date: Wed, 2 Nov 2022 14:28:34 +0100 Subject: [PATCH] Fix build: make n unsigned properly --- include/fmt/chrono.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/include/fmt/chrono.h b/include/fmt/chrono.h index 571081b2..51ef184f 100644 --- a/include/fmt/chrono.h +++ b/include/fmt/chrono.h @@ -1038,12 +1038,13 @@ void write_fractional_seconds(OutputIt& out, Duration d, int precision = -1) { const auto fractional = detail::abs(d) - std::chrono::duration_cast(d); - uint32_or_64_or_128_t subseconds = + const auto& subseconds = std::chrono::treat_as_floating_point< typename subsecond_precision::rep>::value ? fractional.count() : std::chrono::duration_cast(fractional).count(); - const int num_digits = detail::count_digits(subseconds); + auto n = static_cast>(subseconds); + const int num_digits = detail::count_digits(n); int leading_zeroes = std::max(0, num_fractional_digits - num_digits); if (precision < 0) { @@ -1052,7 +1053,7 @@ void write_fractional_seconds(OutputIt& out, Duration d, int precision = -1) { std::chrono::seconds::period>::value) { *out++ = '.'; out = std::fill_n(out, leading_zeroes, '0'); - out = format_decimal(out, subseconds, num_digits).end; + out = format_decimal(out, n, num_digits).end; } } else { *out++ = '.'; @@ -1060,12 +1061,11 @@ void write_fractional_seconds(OutputIt& out, Duration d, int precision = -1) { out = std::fill_n(out, leading_zeroes, '0'); int remaining = precision - leading_zeroes; if (remaining < num_digits) { - subseconds /= - to_unsigned(detail::pow10(to_unsigned(num_digits - remaining))); - out = format_decimal(out, subseconds, remaining).end; + n /= to_unsigned(detail::pow10(to_unsigned(num_digits - remaining))); + out = format_decimal(out, n, remaining).end; return; } - out = format_decimal(out, subseconds, num_digits).end; + out = format_decimal(out, n, num_digits).end; remaining -= num_digits; out = std::fill_n(out, remaining, '0'); }