From cd0ee9276b41bc28e1648479c4b25cb4864f97a0 Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Fri, 3 Feb 2023 15:22:54 +0100 Subject: [PATCH] feat: `quantity_cast` and multiplying by reference now use perfect forwarding of a number --- src/core/include/mp_units/bits/quantity_cast.h | 10 +++++----- src/core/include/mp_units/reference.h | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/core/include/mp_units/bits/quantity_cast.h b/src/core/include/mp_units/bits/quantity_cast.h index 2654842f..70ae64af 100644 --- a/src/core/include/mp_units/bits/quantity_cast.h +++ b/src/core/include/mp_units/bits/quantity_cast.h @@ -55,12 +55,12 @@ class quantity; * * @tparam ToQS a quantity specification to use for a target quantity */ -template - requires(interconvertible(ToQ, get_quantity_spec(R))) -[[nodiscard]] constexpr Quantity auto quantity_cast(const quantity& q) +template + requires(interconvertible(ToQS, get_quantity_spec(Q::reference))) +[[nodiscard]] constexpr Quantity auto quantity_cast(Q&& q) { - constexpr reference::unit> r; - return q.count() * r; + constexpr reference r; + return std::forward(q).number() * r; } } // namespace mp_units diff --git a/src/core/include/mp_units/reference.h b/src/core/include/mp_units/reference.h index b4b08721..f03091b9 100644 --- a/src/core/include/mp_units/reference.h +++ b/src/core/include/mp_units/reference.h @@ -159,9 +159,9 @@ template } template Rep> -[[nodiscard]] constexpr quantity operator*(const Rep& lhs, R) +[[nodiscard]] constexpr quantity operator*(Rep&& lhs, R) { - return quantity(lhs); + return quantity(std::forward(lhs)); } void /*Use `q * (1 * r)` rather than `q * r`.*/ operator*(Quantity auto, Reference auto) = delete;