diff --git a/src/include/units/quantity_cast.h b/src/include/units/quantity_cast.h index 2d9bacc6..d98eb0a8 100644 --- a/src/include/units/quantity_cast.h +++ b/src/include/units/quantity_cast.h @@ -106,25 +106,23 @@ template R requires QuantityOf [[nodiscard]] constexpr auto quantity_cast(const quantity& q) { - using ret_unit = downcast_unit; - using ret = quantity; using traits = detail::cast_traits; using ratio_type = TYPENAME traits::ratio_type; using rep_type = TYPENAME traits::rep_type; constexpr auto c_ratio = detail::cast_ratio(quantity(), To()); if constexpr (treat_as_floating_point) { - return ret(static_cast(static_cast(q.count()) * + return To(static_cast(static_cast(q.count()) * (static_cast(c_ratio.num) * detail::fpow10(c_ratio.exp) / static_cast(c_ratio.den)))); } else { if constexpr (c_ratio.exp > 0) { - return ret(static_cast(static_cast(q.count()) * + return To(static_cast(static_cast(q.count()) * (static_cast(c_ratio.num) * static_cast(detail::ipow10(c_ratio.exp))) / static_cast(c_ratio.den))); } else { - return ret(static_cast(static_cast(q.count()) * + return To(static_cast(static_cast(q.count()) * static_cast(c_ratio.num) / (static_cast(c_ratio.den) * static_cast(detail::ipow10(-c_ratio.exp))))); } diff --git a/test/unit_test/static/quantity_point_test.cpp b/test/unit_test/static/quantity_point_test.cpp index 59ddc78e..36a10bc1 100644 --- a/test/unit_test/static/quantity_point_test.cpp +++ b/test/unit_test/static/quantity_point_test.cpp @@ -208,8 +208,6 @@ static_assert(std::equality_comparable_with>(quantity_point(2_q_km)))::unit, metre>); - static_assert(quantity_point_cast>(quantity_point(2_q_km)).relative().count() == 2000); static_assert( diff --git a/test/unit_test/static/quantity_test.cpp b/test/unit_test/static/quantity_test.cpp index 49783aa0..5cd3c2f8 100644 --- a/test/unit_test/static/quantity_test.cpp +++ b/test/unit_test/static/quantity_test.cpp @@ -670,8 +670,6 @@ static_assert(2_q_dm3 + 2_q_cm3 == 2002_q_ml); // quantity_cast ////////////////// -static_assert(compare>(2_q_km))::unit, metre>); - static_assert(quantity_cast>(2_q_km).count() == 2000); static_assert(quantity_cast>(2000_q_m).count() == 2); static_assert(quantity_cast>(1.23_q_m).count() == 1); @@ -680,6 +678,8 @@ static_assert(quantity_cast(2000_q_m).count() == 2); static_assert(quantity_cast(1.23_q_m).count() == 1); static_assert(quantity_cast(2000.0_q_m / 3600.0_q_s).count() == 2); +static_assert(is_same_v(2_q_dm3)), volume>); +static_assert(!is_same_v(2_q_dm3)), volume>); //////////////// // downcasting