diff --git a/include/fmt/chrono.h b/include/fmt/chrono.h index 4b1804da..7d551f1a 100644 --- a/include/fmt/chrono.h +++ b/include/fmt/chrono.h @@ -441,49 +441,26 @@ template struct formatter { namespace internal { -template FMT_CONSTEXPR const Char* get_units() { return nullptr; } -template <> FMT_CONSTEXPR const char* get_units() { return "as"; } -template <> FMT_CONSTEXPR const wchar_t* get_units() { return L"as"; } -template <> FMT_CONSTEXPR const char* get_units() { return "fs"; } -template <> FMT_CONSTEXPR const wchar_t* get_units() { return L"fs"; } -template <> FMT_CONSTEXPR const char* get_units() { return "ps"; } -template <> FMT_CONSTEXPR const wchar_t* get_units() { return L"ps"; } -template <> FMT_CONSTEXPR const char* get_units() { return "ns"; } -template <> FMT_CONSTEXPR const wchar_t* get_units() { return L"ns"; } -template <> FMT_CONSTEXPR const char* get_units() { - return "µs"; -} -template <> FMT_CONSTEXPR const wchar_t* get_units() { - return L"\u00B5s"; -} -template <> FMT_CONSTEXPR const char* get_units() { return "ms"; } -template <> FMT_CONSTEXPR const wchar_t* get_units() { return L"ms"; } -template <> FMT_CONSTEXPR const char* get_units() { return "cs"; } -template <> FMT_CONSTEXPR const wchar_t* get_units() { return L"cs"; } -template <> FMT_CONSTEXPR const char* get_units() { return "ds"; } -template <> FMT_CONSTEXPR const wchar_t* get_units() { return L"ds"; } -template <> FMT_CONSTEXPR const char* get_units>() { return "s"; } -template <> FMT_CONSTEXPR const wchar_t* get_units>() { return L"s"; } -template <> FMT_CONSTEXPR const char* get_units() { return "das"; } -template <> FMT_CONSTEXPR const wchar_t* get_units() { return L"das"; } -template <> FMT_CONSTEXPR const char* get_units() { return "hs"; } -template <> FMT_CONSTEXPR const wchar_t* get_units() { return L"hs"; } -template <> FMT_CONSTEXPR const char* get_units() { return "ks"; } -template <> FMT_CONSTEXPR const wchar_t* get_units() { return L"ks"; } -template <> FMT_CONSTEXPR const char* get_units() { return "Ms"; } -template <> FMT_CONSTEXPR const wchar_t* get_units() { return L"Ms"; } -template <> FMT_CONSTEXPR const char* get_units() { return "Gs"; } -template <> FMT_CONSTEXPR const wchar_t* get_units() { return L"Gs"; } -template <> FMT_CONSTEXPR const char* get_units() { return "Ts"; } -template <> FMT_CONSTEXPR const wchar_t* get_units() { return L"Ts"; } -template <> FMT_CONSTEXPR const char* get_units() { return "Ps"; } -template <> FMT_CONSTEXPR const wchar_t* get_units() { return L"Ps"; } -template <> FMT_CONSTEXPR const char* get_units() { return "Es"; } -template <> FMT_CONSTEXPR const wchar_t* get_units() { return L"Es"; } -template <> FMT_CONSTEXPR const char* get_units>() { return "m"; } -template <> FMT_CONSTEXPR const wchar_t* get_units>() { return L"m"; } -template <> FMT_CONSTEXPR const char* get_units>() { return "h"; } -template <> FMT_CONSTEXPR const wchar_t* get_units>() { return L"h"; } +template FMT_CONSTEXPR const char* get_units() { return nullptr; } +template <> FMT_CONSTEXPR const char* get_units() { return "as"; } +template <> FMT_CONSTEXPR const char* get_units() { return "fs"; } +template <> FMT_CONSTEXPR const char* get_units() { return "ps"; } +template <> FMT_CONSTEXPR const char* get_units() { return "ns"; } +template <> FMT_CONSTEXPR const char* get_units() { return "µs"; } +template <> FMT_CONSTEXPR const char* get_units() { return "ms"; } +template <> FMT_CONSTEXPR const char* get_units() { return "cs"; } +template <> FMT_CONSTEXPR const char* get_units() { return "ds"; } +template <> FMT_CONSTEXPR const char* get_units>() { return "s"; } +template <> FMT_CONSTEXPR const char* get_units() { return "das"; } +template <> FMT_CONSTEXPR const char* get_units() { return "hs"; } +template <> FMT_CONSTEXPR const char* get_units() { return "ks"; } +template <> FMT_CONSTEXPR const char* get_units() { return "Ms"; } +template <> FMT_CONSTEXPR const char* get_units() { return "Gs"; } +template <> FMT_CONSTEXPR const char* get_units() { return "Ts"; } +template <> FMT_CONSTEXPR const char* get_units() { return "Ps"; } +template <> FMT_CONSTEXPR const char* get_units() { return "Es"; } +template <> FMT_CONSTEXPR const char* get_units>() { return "m"; } +template <> FMT_CONSTEXPR const char* get_units>() { return "h"; } enum class numeric_system { standard, @@ -788,8 +765,15 @@ OutputIt format_duration_value(OutputIt out, Rep val, int precision) { template OutputIt format_duration_unit(OutputIt out) { - const Char format[] { '{', '}', 0 }; - if (const Char* unit = get_units()) return format_to(out, format, unit); + if (const char* unit = get_units()) { + string_view s(unit); + if FMT_CONSTEXPR (std::is_same::value) { + utf8_to_utf16 u(s); + return std::copy(u.c_str(), u.c_str() + u.size(), out); + } else { + return std::copy(s.begin(), s.end(), out); + } + } const Char num_f[] { '[', '{', '}', ']', 's', 0 }; if (Period::den == 1) return format_to(out, num_f, Period::num); const Char num_def_f[] { '[', '{', '}', '/', '{', '}', ']', 's', 0 };