From 054e28671c3245699af4e4ca318bea6573dc93ea Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Wed, 4 Dec 2024 20:21:24 +0100 Subject: [PATCH] refactor: implicit expression variations used in `quantity` and `quantity_point` constraints --- .../include/mp-units/framework/quantity.h | 34 +++++++++---------- .../mp-units/framework/quantity_point.h | 12 +++---- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/core/include/mp-units/framework/quantity.h b/src/core/include/mp-units/framework/quantity.h index 3eda7dfd..8f4b4ef3 100644 --- a/src/core/include/mp-units/framework/quantity.h +++ b/src/core/include/mp-units/framework/quantity.h @@ -242,21 +242,21 @@ public: } template ToU> - requires requires(quantity q) { value_cast(q); } + requires requires(const quantity q) { value_cast(q); } [[nodiscard]] constexpr QuantityOf auto force_in(ToU) const { return value_cast(*this); } template ToRep> - requires requires(quantity q) { value_cast(q); } + requires requires(const quantity q) { value_cast(q); } [[nodiscard]] constexpr QuantityOf auto force_in() const { return value_cast(*this); } template ToRep, detail::UnitCompatibleWith ToU> - requires requires(quantity q) { value_cast(q); } + requires requires(const quantity q) { value_cast(q); } [[nodiscard]] constexpr QuantityOf auto force_in(ToU) const { return value_cast(*this); @@ -294,7 +294,7 @@ public: } template U> - requires requires(quantity q) { value_cast(q); } + requires requires(const quantity q) { value_cast(q); } [[nodiscard]] constexpr rep force_numerical_value_in(U) const noexcept { return (*this).force_in(U{}).numerical_value_is_an_implementation_detail_; @@ -323,7 +323,7 @@ public: // member unary operators [[nodiscard]] constexpr QuantityOf auto operator+() const - requires requires(rep v) { + requires requires(const rep v) { { +v } -> std::common_with; } { @@ -331,7 +331,7 @@ public: } [[nodiscard]] constexpr QuantityOf auto operator-() const - requires requires(rep v) { + requires requires(const rep v) { { -v } -> std::common_with; } { @@ -340,7 +340,7 @@ public: template Q> friend constexpr decltype(auto) operator++(Q&& q) - requires requires(rep v) { + requires requires(rep& v) { { ++v } -> std::same_as; } { @@ -349,7 +349,7 @@ public: } [[nodiscard]] constexpr QuantityOf auto operator++(int) - requires requires(rep v) { + requires requires(rep& v) { { v++ } -> std::common_with; } { @@ -358,7 +358,7 @@ public: template Q> friend constexpr decltype(auto) operator--(Q&& q) - requires requires(rep v) { + requires requires(rep& v) { { --v } -> std::same_as; } { @@ -367,7 +367,7 @@ public: } [[nodiscard]] constexpr QuantityOf auto operator--(int) - requires requires(rep v) { + requires requires(rep& v) { { v-- } -> std::common_with; } { @@ -376,7 +376,7 @@ public: // compound assignment operators template Q, auto R2, typename Rep2> - requires detail::QuantityConvertibleTo, quantity> && requires(rep a, Rep2 b) { + requires detail::QuantityConvertibleTo, quantity> && requires(rep& a, const Rep2 b) { { a += b } -> std::same_as; } friend constexpr decltype(auto) operator+=(Q&& lhs, const quantity& rhs) @@ -389,7 +389,7 @@ public: } template Q, auto R2, typename Rep2> - requires detail::QuantityConvertibleTo, quantity> && requires(rep a, Rep2 b) { + requires detail::QuantityConvertibleTo, quantity> && requires(rep& a, const Rep2 b) { { a -= b } -> std::same_as; } friend constexpr decltype(auto) operator-=(Q&& lhs, const quantity& rhs) @@ -403,7 +403,7 @@ public: template Q, auto R2, typename Rep2> requires detail::QuantityConvertibleTo, quantity> && (!treat_as_floating_point) && - requires(rep a, Rep2 b) { + requires(rep& a, const Rep2 b) { { a %= b } -> std::same_as; } friend constexpr decltype(auto) operator%=(Q&& lhs, const quantity& rhs) @@ -418,7 +418,7 @@ public: } template Q, detail::ValuePreservingTo Value> - requires(!Quantity) && requires(rep a, Value b) { + requires(!Quantity) && requires(rep& a, const Value b) { { a *= b } -> std::same_as; } friend constexpr decltype(auto) operator*=(Q&& lhs, const Value& val) @@ -431,7 +431,7 @@ public: template Q1, QuantityOf Q2> requires(Q2::unit == ::mp_units::one) && detail::ValuePreservingTo && - requires(rep a, Q2::rep b) { + requires(rep& a, const Q2::rep b) { { a *= b } -> std::same_as; } friend constexpr decltype(auto) operator*=(Q1&& lhs, const Q2& rhs) @@ -440,7 +440,7 @@ public: } template Q, detail::ValuePreservingTo Value> - requires(!Quantity) && requires(rep a, Value b) { + requires(!Quantity) && requires(rep& a, const Value b) { { a /= b } -> std::same_as; } friend constexpr decltype(auto) operator/=(Q&& lhs, const Value& val) @@ -454,7 +454,7 @@ public: template Q1, QuantityOf Q2> requires(Q2::unit == ::mp_units::one) && detail::ValuePreservingTo && - requires(rep a, Q2::rep b) { + requires(rep& a, const Q2::rep b) { { a /= b } -> std::same_as; } friend constexpr decltype(auto) operator/=(Q1&& lhs, const Q2& rhs) diff --git a/src/core/include/mp-units/framework/quantity_point.h b/src/core/include/mp-units/framework/quantity_point.h index d297b78c..8079d5d1 100644 --- a/src/core/include/mp-units/framework/quantity_point.h +++ b/src/core/include/mp-units/framework/quantity_point.h @@ -295,7 +295,7 @@ public: #endif template - requires requires(quantity_point qp) { qp - PO2{}; } + requires requires(const quantity_point qp) { qp - PO2{}; } [[nodiscard]] constexpr Quantity auto quantity_from(PO2) const { return *this - PO2{}; @@ -344,21 +344,21 @@ public: } template ToU> - requires requires(quantity_type q) { value_cast(q); } + requires requires(const quantity_type q) { value_cast(q); } [[nodiscard]] constexpr QuantityPointOf auto force_in(ToU) const { return ::mp_units::quantity_point{quantity_ref_from(point_origin).force_in(ToU{}), point_origin}; } template ToRep> - requires requires(quantity_type q) { value_cast(q); } + requires requires(const quantity_type q) { value_cast(q); } [[nodiscard]] constexpr QuantityPointOf auto force_in() const { return ::mp_units::quantity_point{quantity_ref_from(point_origin).template force_in(), point_origin}; } template ToRep, detail::UnitCompatibleWith ToU> - requires requires(quantity_type q) { value_cast(q); } + requires requires(const quantity_type q) { value_cast(q); } [[nodiscard]] constexpr QuantityPointOf auto force_in(ToU) const { return ::mp_units::quantity_point{quantity_ref_from(point_origin).template force_in(ToU{}), point_origin}; @@ -433,7 +433,7 @@ public: // compound assignment operators template QP, auto R2, typename Rep2> requires detail::QuantityConvertibleTo, quantity_type> && - requires(quantity_type q) { quantity_from_origin_is_an_implementation_detail_ += q; } + requires(const quantity_type q) { quantity_from_origin_is_an_implementation_detail_ += q; } friend constexpr decltype(auto) operator+=(QP&& qp, const quantity& q) { qp.quantity_from_origin_is_an_implementation_detail_ += q; @@ -442,7 +442,7 @@ public: template QP, auto R2, typename Rep2> requires detail::QuantityConvertibleTo, quantity_type> && - requires(quantity_type q) { quantity_from_origin_is_an_implementation_detail_ -= q; } + requires(const quantity_type q) { quantity_from_origin_is_an_implementation_detail_ -= q; } friend constexpr decltype(auto) operator-=(QP&& qp, const quantity& q) { qp.quantity_from_origin_is_an_implementation_detail_ -= q;