diff --git a/src/core/include/mp-units/quantity.h b/src/core/include/mp-units/quantity.h index fb9a3445..270d27bd 100644 --- a/src/core/include/mp-units/quantity.h +++ b/src/core/include/mp-units/quantity.h @@ -176,14 +176,14 @@ public: // unit conversions template U> requires detail::QuantityConvertibleTo> - [[nodiscard]] constexpr Quantity auto in(U) const + [[nodiscard]] constexpr QuantityOf auto in(U) const { return quantity{*this}; } template U> requires requires(quantity q) { value_cast(q); } - [[nodiscard]] constexpr Quantity auto force_in(U) const + [[nodiscard]] constexpr QuantityOf auto force_in(U) const { return value_cast(*this); } @@ -251,7 +251,7 @@ public: } // member unary operators - [[nodiscard]] constexpr Quantity auto operator+() const + [[nodiscard]] constexpr QuantityOf auto operator+() const requires requires(rep v) { { +v @@ -261,7 +261,7 @@ public: return ::mp_units::quantity{+numerical_value_is_an_implementation_detail_, reference}; } - [[nodiscard]] constexpr Quantity auto operator-() const + [[nodiscard]] constexpr QuantityOf auto operator-() const requires requires(rep v) { { -v @@ -283,7 +283,7 @@ public: return std::forward(q); } - [[nodiscard]] constexpr Quantity auto operator++(int) + [[nodiscard]] constexpr QuantityOf auto operator++(int) requires requires(rep v) { { v++ @@ -305,7 +305,7 @@ public: return std::forward(q); } - [[nodiscard]] constexpr Quantity auto operator--(int) + [[nodiscard]] constexpr QuantityOf auto operator--(int) requires requires(rep v) { { v-- @@ -466,7 +466,7 @@ template template requires(!Quantity) && (!Reference) && detail::InvokeResultOf, Rep, const Value&> -[[nodiscard]] constexpr Quantity auto operator*(const quantity& q, const Value& v) +[[nodiscard]] constexpr QuantityOf auto operator*(const quantity& q, const Value& v) { return quantity{q.numerical_value_ref_in(get_unit(R)) * v, R}; } @@ -474,7 +474,7 @@ template template requires(!Quantity) && (!Reference) && detail::InvokeResultOf, const Value&, Rep> -[[nodiscard]] constexpr Quantity auto operator*(const Value& v, const quantity& q) +[[nodiscard]] constexpr QuantityOf auto operator*(const Value& v, const quantity& q) { return quantity{v * q.numerical_value_ref_in(get_unit(R)), R}; } @@ -490,7 +490,7 @@ template template requires(!Quantity) && (!Reference) && detail::InvokeResultOf, Rep, const Value&> -[[nodiscard]] constexpr Quantity auto operator/(const quantity& q, const Value& v) +[[nodiscard]] constexpr QuantityOf auto operator/(const quantity& q, const Value& v) { gsl_ExpectsAudit(v != quantity_values::zero()); return quantity{q.numerical_value_ref_in(get_unit(R)) / v, R}; @@ -499,7 +499,8 @@ template template requires(!Quantity) && (!Reference) && detail::InvokeResultOf, const Value&, Rep> -[[nodiscard]] constexpr Quantity auto operator/(const Value& v, const quantity& q) +[[nodiscard]] constexpr QuantityOf auto operator/(const Value& v, + const quantity& q) { return quantity{v / q.numerical_value_ref_in(get_unit(R)), ::mp_units::one / R}; } diff --git a/src/core/include/mp-units/quantity_point.h b/src/core/include/mp-units/quantity_point.h index 1f6bcba6..19cb1d43 100644 --- a/src/core/include/mp-units/quantity_point.h +++ b/src/core/include/mp-units/quantity_point.h @@ -266,14 +266,14 @@ public: // unit conversions template U> requires detail::QuantityConvertibleTo> - [[nodiscard]] constexpr QuantityPoint auto in(U) const + [[nodiscard]] constexpr QuantityPointOf auto in(U) const { return ::mp_units::quantity_point{quantity_ref_from(PO).in(U{}), PO}; } template U> requires requires(quantity_type q) { value_cast(q); } - [[nodiscard]] constexpr QuantityPoint auto force_in(U) const + [[nodiscard]] constexpr QuantityPointOf auto force_in(U) const { return ::mp_units::quantity_point{quantity_ref_from(PO).force_in(U{}), PO}; }