mirror of
https://github.com/mpusz/mp-units.git
synced 2025-08-05 13:14:29 +02:00
feat: quantity_cast<kind_of_qs>(associated_unit)
now returns the bare unit as a reference
This commit is contained in:
@@ -49,7 +49,11 @@ template<QuantitySpec auto ToQS, typename Q>
|
||||
[[nodiscard]] constexpr Quantity auto quantity_cast(Q&& q)
|
||||
requires Quantity<std::remove_cvref_t<Q>> && (castable(q.quantity_spec, ToQS))
|
||||
{
|
||||
return make_quantity<reference<ToQS, q.unit>{}>(std::forward<Q>(q).number());
|
||||
if constexpr (detail::QuantityKindSpec<std::remove_const_t<decltype(ToQS)>> &&
|
||||
AssociatedUnit<std::remove_const_t<decltype(q.unit)>>)
|
||||
return make_quantity<q.unit>(std::forward<Q>(q).number());
|
||||
else
|
||||
return make_quantity<reference<ToQS, q.unit>{}>(std::forward<Q>(q).number());
|
||||
}
|
||||
|
||||
} // namespace mp_units
|
||||
|
@@ -887,6 +887,15 @@ static_assert(value_cast<km>(2000 * m).number() == 2);
|
||||
static_assert(value_cast<int>(1.23 * m).number() == 1);
|
||||
static_assert(value_cast<km / h>(2000.0 * m / (3600.0 * s)).number() == 2);
|
||||
|
||||
//////////////////
|
||||
// quantity_cast
|
||||
//////////////////
|
||||
|
||||
static_assert(is_of_type<quantity_cast<isq::distance>(1 * m), quantity<isq::distance[m], int>>);
|
||||
static_assert(is_of_type<quantity_cast<isq::distance>(isq::length(1 * m)), quantity<isq::distance[m], int>>);
|
||||
static_assert(is_of_type<quantity_cast<kind_of<isq::length>>(isq::length(1 * m)), quantity<si::metre, int>>);
|
||||
static_assert(is_of_type<quantity_cast<kind_of<isq::length>>(isq::distance(1 * m)), quantity<si::metre, int>>);
|
||||
|
||||
|
||||
// QuantityOf
|
||||
static_assert(QuantityOf<quantity<isq::length[m]>, isq::length>);
|
||||
|
Reference in New Issue
Block a user