diff --git a/src/core/include/units/magnitude.h b/src/core/include/units/magnitude.h index d65c9ad1..7656a348 100644 --- a/src/core/include/units/magnitude.h +++ b/src/core/include/units/magnitude.h @@ -517,16 +517,14 @@ constexpr auto numerator(magnitude) constexpr auto denominator(Magnitude auto m) { return numerator(pow<-1>(m)); } -// Implementation of implicit conversion to ratio goes here, because it needs `numerator()` and `denominator()`. -template - requires detail::is_base_power_pack_valid -constexpr magnitude::operator ratio() const +// Implementation of conversion to ratio goes here, because it needs `numerator()` and `denominator()`. +constexpr ratio as_ratio(Magnitude auto m) { - static_assert(is_rational(magnitude{})); + static_assert(is_rational(m)); return ratio{ - get_value(numerator(*this)), - get_value(denominator(*this)), + get_value(numerator(m)), + get_value(denominator(m)), }; } diff --git a/test/unit_test/runtime/magnitude_test.cpp b/test/unit_test/runtime/magnitude_test.cpp index 038aff8a..22a3dd4b 100644 --- a/test/unit_test/runtime/magnitude_test.cpp +++ b/test/unit_test/runtime/magnitude_test.cpp @@ -374,9 +374,9 @@ TEST_CASE("Constructing ratio from rational magnitude") check_ratio_round_trip_is_identity(); } - SECTION("Rational magnitude implicitly converts to ratio") + SECTION("Rational magnitude converts to ratio") { - constexpr ratio r = as_magnitude(); + constexpr ratio r = as_ratio(as_magnitude()); CHECK(r == ratio{22, 7}); }