diff --git a/src/core/include/mp-units/framework/unit.h b/src/core/include/mp-units/framework/unit.h index e4a79f14..91658a34 100644 --- a/src/core/include/mp-units/framework/unit.h +++ b/src/core/include/mp-units/framework/unit.h @@ -859,18 +859,16 @@ constexpr Out unit_symbol_impl(Out out, const type_list& nums, const ty return unit_symbol_impl(out, nums, fmt, false); } else { using enum unit_symbol_solidus; - if constexpr (sizeof...(Nums) > 0) { - out = unit_symbol_impl(out, nums, fmt, false); - } + if constexpr (sizeof...(Nums) > 0) out = unit_symbol_impl(out, nums, fmt, false); if (fmt.solidus == always || (fmt.solidus == one_denominator && sizeof...(Dens) == 1)) { if constexpr (sizeof...(Nums) == 0) *out++ = '1'; *out++ = '/'; - } else { + if (sizeof...(Dens) > 1) *out++ = '('; + } else if constexpr (sizeof...(Nums) > 0) { out = print_separator(out, fmt); } - if (fmt.solidus == always && sizeof...(Dens) > 1) *out++ = '('; const bool negative_power = fmt.solidus == never || (fmt.solidus == one_denominator && sizeof...(Dens) > 1); out = unit_symbol_impl(out, dens, fmt, negative_power); if (fmt.solidus == always && sizeof...(Dens) > 1) *out++ = ')'; diff --git a/test/static/unit_symbol_test.cpp b/test/static/unit_symbol_test.cpp index f18b74e5..48b75510 100644 --- a/test/static/unit_symbol_test.cpp +++ b/test/static/unit_symbol_test.cpp @@ -175,6 +175,8 @@ static_assert(unit_symbol(kilogram * metre / square(secon static_assert(unit_symbol(kilogram * metre / square(second)) == "kg m s^-2"); static_assert(unit_symbol(kilogram * metre / square(second)) == "kg⋅m⋅s⁻²"); +static_assert(unit_symbol(one / metre / square(second)) == "m⁻¹ s⁻²"); +static_assert(unit_symbol(one / metre / square(second)) == "1/(m s²)"); static_assert(unit_symbol(kilogram / metre / square(second)) == "kg m⁻¹ s⁻²"); static_assert(unit_symbol(kilogram / metre / square(second)) == "kg⋅m⁻¹⋅s⁻²"); static_assert(unit_symbol(kilogram / metre / square(second)) == "kg m^-1 s^-2");