From fc3832ffa2dbb6d62ba9f0affaa497ffc6a99bf9 Mon Sep 17 00:00:00 2001 From: Walter Gray Date: Fri, 13 Nov 2020 18:10:35 -0800 Subject: [PATCH] attempt simplification to work around MSVC problem --- include/fmt/chrono.h | 44 +++++++++++++------------------------------- 1 file changed, 13 insertions(+), 31 deletions(-) diff --git a/include/fmt/chrono.h b/include/fmt/chrono.h index da6267d2..522cf495 100644 --- a/include/fmt/chrono.h +++ b/include/fmt/chrono.h @@ -763,29 +763,19 @@ inline std::chrono::duration get_milliseconds( } template ::value && std::is_same::value)> + FMT_ENABLE_IF(std::is_integral::value)> OutputIt format_duration_value(OutputIt out, Rep val, int) { - return format_to(out, FMT_STRING("{}"), val); + static FMT_CONSTEXPR_DECL const Char format[] = {'{', '}', 0}; + return format_to(out, compile_string_to_view(format), val); } template ::value && std::is_same::value)> -OutputIt format_duration_value(OutputIt out, Rep val, int) { - return format_to(out, FMT_STRING(L"{}"), val); -} - -template ::value && std::is_same::value)> + FMT_ENABLE_IF(std::is_floating_point::value)> OutputIt format_duration_value(OutputIt out, Rep val, int precision) { - if (precision >= 0) return format_to(out, FMT_STRING("{:.{}f}"), val, precision); - return format_to(out, FMT_STRING("{:g}"), val); -} - -template ::value && std::is_same::value)> -OutputIt format_duration_value(OutputIt out, Rep val, int precision) { - if (precision >= 0) return format_to(out, FMT_STRING("L{:.{}f}"), val, precision); - return format_to(out, FMT_STRING("L{:g}"), val); + static FMT_CONSTEXPR_DECL const Char pr_f[] = {'{', ':', '.', '{', '}', 'f', '}', 0}; + if (precision >= 0) return format_to(out, compile_string_to_view(pr_f), val, precision); + static FMT_CONSTEXPR_DECL const Char fp_f[] = {'{', ':', 'g', '}', 0}; + return format_to(out, compile_string_to_view(fp_f), val); } template @@ -801,22 +791,14 @@ OutputIt copy_unit(string_view unit, OutputIt out, wchar_t) { return std::copy(u.c_str(), u.c_str() + u.size(), out); } -template ::value)> +template OutputIt format_duration_unit(OutputIt out) { if (const char* unit = get_units()) return copy_unit(string_view(unit), out, Char()); - if (const_check(Period::den == 1)) return format_to(out, FMT_STRING("[{}]s"), Period::num); - return format_to(out, FMT_STRING("[{}/{}]s"), Period::num, Period::den); -} - -template ::value)> -OutputIt format_duration_unit(OutputIt out) { - if (const char* unit = get_units()) - return copy_unit(string_view(unit), out, Char()); - if (const_check(Period::den == 1)) return format_to(out, FMT_STRING(L"[{}]s"), Period::num); - return format_to(out, FMT_STRING(L"[{}/{}]s"), Period::num, Period::den); + static FMT_CONSTEXPR_DECL const Char num_f[] = {'[', '{', '}', ']', 's', 0}; + if (const_check(Period::den == 1)) return format_to(out, compile_string_to_view(num_f), Period::num); + static FMT_CONSTEXPR_DECL const Char num_def_f[] = {'[', '{', '}', '/', '{', '}', ']', 's', 0}; + return format_to(out, compile_string_to_view(num_def_f), Period::num, Period::den); } template