From 6975a025706798df19de01a3090fa222aee73fb6 Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Mon, 22 May 2023 17:54:47 +0200 Subject: [PATCH] refactor: `InvocableQuantities` concept simplified --- src/core/include/mp_units/quantity.h | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/core/include/mp_units/quantity.h b/src/core/include/mp_units/quantity.h index 9078c26b..92c82883 100644 --- a/src/core/include/mp_units/quantity.h +++ b/src/core/include/mp_units/quantity.h @@ -66,17 +66,10 @@ template concept InvokeResultOf = std::regular_invocable && RepresentationOf, Ch>; template -concept InvocableQuantities = - Quantity && Quantity && - InvokeResultOf && - requires { common_reference(Q1::reference, Q2::reference); } && - std::constructible_from>, - Q1> && - std::constructible_from>, - Q2>; +concept InvocableQuantities = Quantity && Quantity && + InvokeResultOf && + requires { common_reference(Q1::reference, Q2::reference); }; template requires detail::InvocableQuantities @@ -340,6 +333,7 @@ private: template explicit quantity(Q) -> quantity::reference, typename quantity_like_traits::rep>; +// binary operators on quantities template requires detail::InvocableQuantities, quantity, quantity> [[nodiscard]] constexpr Quantity auto operator+(const quantity& lhs, const quantity& rhs) @@ -433,6 +427,7 @@ template return ct(lhs).number() <=> ct(rhs).number(); } +// binary operators on dimensionless quantities template requires(!Quantity) && (quantity::dimension == dimension_one) && detail::InvokeResultOf, Rep, Value> @@ -491,6 +486,7 @@ template return q <=> make_quantity<::mp_units::one>(v); } +// make_quantity template requires RepresentationOf, get_quantity_spec(R).character> [[nodiscard]] constexpr quantity> make_quantity(Rep&& v)