From 14f658120e522a2ecab58637dec996c6c93a9700 Mon Sep 17 00:00:00 2001 From: Yves Delley Date: Fri, 10 May 2024 23:08:46 +0200 Subject: [PATCH] fix value_cast with lvalue references to quantity_point --- src/core/include/mp-units/framework/value_cast.h | 8 ++++---- test/static/quantity_point_test.cpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core/include/mp-units/framework/value_cast.h b/src/core/include/mp-units/framework/value_cast.h index eaedbd17..96b86dbc 100644 --- a/src/core/include/mp-units/framework/value_cast.h +++ b/src/core/include/mp-units/framework/value_cast.h @@ -107,7 +107,7 @@ template [[nodiscard]] constexpr QuantityPoint auto value_cast(QP&& qp) { return quantity_point{value_cast(std::forward(qp).quantity_from_origin_is_an_implementation_detail_), - qp.point_origin}; + std::remove_reference_t::point_origin}; } /** @@ -124,10 +124,10 @@ template requires QuantityPoint> && RepresentationOf::quantity_spec.character> && std::constructible_from::rep> -[[nodiscard]] constexpr quantity_point::reference, QP::point_origin, ToRep> value_cast( +[[nodiscard]] constexpr quantity_point::reference, std::remove_reference_t::point_origin, ToRep> value_cast( QP&& qp) { - return {value_cast(std::forward(qp).quantity_from_origin_is_an_implementation_detail_), qp.point_origin}; + return {value_cast(std::forward(qp).quantity_from_origin_is_an_implementation_detail_), std::remove_reference_t::point_origin}; } /** @@ -147,7 +147,7 @@ template [[nodiscard]] constexpr QuantityPoint auto value_cast(QP&& qp) { return quantity_point{value_cast(std::forward(qp).quantity_from_origin_is_an_implementation_detail_), - qp.point_origin}; + std::remove_reference_t::point_origin}; } } // namespace mp_units diff --git a/test/static/quantity_point_test.cpp b/test/static/quantity_point_test.cpp index 8de77236..acc53416 100644 --- a/test/static/quantity_point_test.cpp +++ b/test/static/quantity_point_test.cpp @@ -1689,7 +1689,7 @@ namespace lvalue_tests { constexpr quantity_point lvalue_qp{2 * km}; static_assert(value_cast(lvalue_qp).quantity_from_zero().numerical_value_in(m) == 2000); static_assert(value_cast(lvalue_qp).quantity_from_zero().numerical_value_in(km) == 2.f); -static_assert(value_cast(lvalue_qp).quantity_from_zero().numerical_value_in(m) == 2000.f); +static_assert(value_cast(lvalue_qp).quantity_from_zero().numerical_value_in(m) == 2000.f); } // namespace lvalue_tests } // namespace