Add alias for typename Duration::rep

This commit is contained in:
Stepan Ponomarev 2022-10-26 12:29:55 +02:00
parent 6ecde30513
commit e74bc99746

View File

@ -1099,7 +1099,8 @@ void write_fractional_seconds(OutputIt& out, Duration d, int precision) {
// pass the Rep value in the chrono_formatter. // pass the Rep value in the chrono_formatter.
template <typename Duration> template <typename Duration>
void write_floating_seconds(memory_buffer& buf, Duration duration) { void write_floating_seconds(memory_buffer& buf, Duration duration) {
FMT_ASSERT(std::is_floating_point<typename Duration::rep>::value, ""); using Rep = typename Duration::rep;
FMT_ASSERT(std::is_floating_point<Rep>::value, "");
auto num_fractional_digits = auto num_fractional_digits =
count_fractional_digits<Duration::period::num, count_fractional_digits<Duration::period::num,
Duration::period::den>::value; Duration::period::den>::value;
@ -1107,35 +1108,36 @@ void write_floating_seconds(memory_buffer& buf, Duration duration) {
// precision. // precision.
auto val = duration.count(); auto val = duration.count();
if (num_fractional_digits < 6 && if (num_fractional_digits < 6 &&
static_cast<typename Duration::rep>(std::round(val)) != val) static_cast<Rep>(std::round(val)) != val)
num_fractional_digits = 6; num_fractional_digits = 6;
format_to( format_to(
std::back_inserter(buf), runtime("{:.{}f}"), std::back_inserter(buf), runtime("{:.{}f}"),
std::fmod(val * std::fmod(val *
static_cast<typename Duration::rep>(Duration::period::num) / static_cast<Rep>(Duration::period::num) /
static_cast<typename Duration::rep>(Duration::period::den), static_cast<Rep>(Duration::period::den),
static_cast<typename Duration::rep>(60)), static_cast<Rep>(60)),
num_fractional_digits); num_fractional_digits);
} }
template <typename Duration> template <typename Duration>
void write_floating_seconds(memory_buffer& buf, Duration duration, void write_floating_seconds(memory_buffer& buf, Duration duration,
int precision) { int precision) {
using Rep = typename Duration::rep;
if (precision < 0) { if (precision < 0) {
write_floating_seconds(buf, duration); write_floating_seconds(buf, duration);
return; return;
} }
FMT_ASSERT(std::is_floating_point<typename Duration::rep>::value, ""); FMT_ASSERT(std::is_floating_point<Rep>::value, "");
auto val = duration.count(); auto val = duration.count();
format_to( format_to(
std::back_inserter(buf), runtime("{:.{}f}"), std::back_inserter(buf), runtime("{:.{}f}"),
std::fmod(val * std::fmod(val *
static_cast<typename Duration::rep>(Duration::period::num) / static_cast<Rep>(Duration::period::num) /
static_cast<typename Duration::rep>(Duration::period::den), static_cast<Rep>(Duration::period::den),
static_cast<typename Duration::rep>(60)), static_cast<Rep>(60)),
precision); precision);
} }