From 9ab8136c982f76d824648bb51a291871cd736a11 Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Tue, 13 Jun 2023 14:52:14 +0300 Subject: [PATCH] refactor: `has_unit_symbol()` added --- src/core-fmt/include/mp-units/format.h | 2 +- src/core-io/include/mp-units/iostream.h | 2 +- src/core/include/mp-units/unit.h | 12 +++++++++--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/core-fmt/include/mp-units/format.h b/src/core-fmt/include/mp-units/format.h index c5832340..1234296c 100644 --- a/src/core-fmt/include/mp-units/format.h +++ b/src/core-fmt/include/mp-units/format.h @@ -396,7 +396,7 @@ private: if (begin == end || *begin == '}') { // default format should print value followed by the unit separated with 1 space out = mp_units::detail::format_units_quantity_value(out, q.number(), specs.rep, ctx.locale()); - if constexpr (!std::derived_from>) { + if constexpr (mp_units::detail::has_unit_symbol(get_unit(Reference))) { *out++ = CharT(' '); out = unit_symbol_to(out, get_unit(Reference)); } diff --git a/src/core-io/include/mp-units/iostream.h b/src/core-io/include/mp-units/iostream.h index 3426a98d..d9958fae 100644 --- a/src/core-io/include/mp-units/iostream.h +++ b/src/core-io/include/mp-units/iostream.h @@ -35,7 +35,7 @@ template void to_stream(std::basic_ostream& os, const quantity& q) { os << q.number(); - if constexpr (!std::derived_from>) { + if constexpr (has_unit_symbol(get_unit(R))) { os << " "; unit_symbol_to(std::ostream_iterator(os), get_unit(R)); } diff --git a/src/core/include/mp-units/unit.h b/src/core/include/mp-units/unit.h index 76d9d815..ca433c39 100644 --- a/src/core/include/mp-units/unit.h +++ b/src/core/include/mp-units/unit.h @@ -684,6 +684,12 @@ constexpr Out print_separator(Out out, unit_symbol_formatting fmt) return out; } +template +[[nodiscard]] consteval bool has_unit_symbol(U) +{ + return !std::derived_from>; +} + template Out, Unit U> requires requires { U::symbol; } constexpr Out unit_symbol_impl(Out out, U, unit_symbol_formatting fmt, bool negative_power) @@ -706,11 +712,11 @@ constexpr Out unit_symbol_impl(Out out, const scaled_unit& u, unit_symbol_ constexpr auto mag_txt = magnitude_text(); out = copy(mag_txt, fmt.encoding, out); - if constexpr (std::derived_from, derived_unit<>>) - return out; - else { + if constexpr (has_unit_symbol(u.reference_unit)) { *out++ = ' '; return unit_symbol_impl(out, u.reference_unit, fmt, negative_power); + } else { + return out; } } }