diff --git a/src/core/include/mp-units/bits/quantity_cast.h b/src/core/include/mp-units/bits/quantity_cast.h index 712ea041..c465837d 100644 --- a/src/core/include/mp-units/bits/quantity_cast.h +++ b/src/core/include/mp-units/bits/quantity_cast.h @@ -49,7 +49,11 @@ template [[nodiscard]] constexpr Quantity auto quantity_cast(Q&& q) requires Quantity> && (castable(q.quantity_spec, ToQS)) { - return make_quantity{}>(std::forward(q).number()); + if constexpr (detail::QuantityKindSpec> && + AssociatedUnit>) + return make_quantity(std::forward(q).number()); + else + return make_quantity{}>(std::forward(q).number()); } } // namespace mp_units diff --git a/test/unit_test/static/quantity_test.cpp b/test/unit_test/static/quantity_test.cpp index 9b44ddb6..b1a6851a 100644 --- a/test/unit_test/static/quantity_test.cpp +++ b/test/unit_test/static/quantity_test.cpp @@ -887,6 +887,15 @@ static_assert(value_cast(2000 * m).number() == 2); static_assert(value_cast(1.23 * m).number() == 1); static_assert(value_cast(2000.0 * m / (3600.0 * s)).number() == 2); +////////////////// +// quantity_cast +////////////////// + +static_assert(is_of_type(1 * m), quantity>); +static_assert(is_of_type(isq::length(1 * m)), quantity>); +static_assert(is_of_type>(isq::length(1 * m)), quantity>); +static_assert(is_of_type>(isq::distance(1 * m)), quantity>); + // QuantityOf static_assert(QuantityOf, isq::length>);