mirror of
https://github.com/mpusz/mp-units.git
synced 2025-08-01 03:14:29 +02:00
fix value_cast with lvalue references to quantity_point
This commit is contained in:
@@ -107,7 +107,7 @@ template<Unit auto ToU, typename QP>
|
||||
[[nodiscard]] constexpr QuantityPoint auto value_cast(QP&& qp)
|
||||
{
|
||||
return quantity_point{value_cast<ToU>(std::forward<QP>(qp).quantity_from_origin_is_an_implementation_detail_),
|
||||
qp.point_origin};
|
||||
std::remove_reference_t<QP>::point_origin};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -124,10 +124,10 @@ template<Representation ToRep, typename QP>
|
||||
requires QuantityPoint<std::remove_cvref_t<QP>> &&
|
||||
RepresentationOf<ToRep, std::remove_reference_t<QP>::quantity_spec.character> &&
|
||||
std::constructible_from<ToRep, typename std::remove_reference_t<QP>::rep>
|
||||
[[nodiscard]] constexpr quantity_point<std::remove_reference_t<QP>::reference, QP::point_origin, ToRep> value_cast(
|
||||
[[nodiscard]] constexpr quantity_point<std::remove_reference_t<QP>::reference, std::remove_reference_t<QP>::point_origin, ToRep> value_cast(
|
||||
QP&& qp)
|
||||
{
|
||||
return {value_cast<ToRep>(std::forward<QP>(qp).quantity_from_origin_is_an_implementation_detail_), qp.point_origin};
|
||||
return {value_cast<ToRep>(std::forward<QP>(qp).quantity_from_origin_is_an_implementation_detail_), std::remove_reference_t<QP>::point_origin};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -147,7 +147,7 @@ template<Unit auto ToU, Representation ToRep, typename QP>
|
||||
[[nodiscard]] constexpr QuantityPoint auto value_cast(QP&& qp)
|
||||
{
|
||||
return quantity_point{value_cast<ToU, ToRep>(std::forward<QP>(qp).quantity_from_origin_is_an_implementation_detail_),
|
||||
qp.point_origin};
|
||||
std::remove_reference_t<QP>::point_origin};
|
||||
}
|
||||
|
||||
} // namespace mp_units
|
||||
|
@@ -1689,7 +1689,7 @@ namespace lvalue_tests {
|
||||
constexpr quantity_point lvalue_qp{2 * km};
|
||||
static_assert(value_cast<m>(lvalue_qp).quantity_from_zero().numerical_value_in(m) == 2000);
|
||||
static_assert(value_cast<float>(lvalue_qp).quantity_from_zero().numerical_value_in(km) == 2.f);
|
||||
static_assert(value_cast<m,float>(lvalue_qp).quantity_from_zero().numerical_value_in(m) == 2000.f);
|
||||
static_assert(value_cast<m, float>(lvalue_qp).quantity_from_zero().numerical_value_in(m) == 2000.f);
|
||||
} // namespace lvalue_tests
|
||||
|
||||
} // namespace
|
||||
|
Reference in New Issue
Block a user