From cdf9f929c39c85e770104b946137e4296f14ed7b Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Tue, 7 May 2019 17:39:21 -0600 Subject: [PATCH] Refactoring part of quantity interface (similar changes applied to the rest of functions make gcc crash) --- src/include/units/quantity.h | 45 +++++++++++++++--------------------- 1 file changed, 18 insertions(+), 27 deletions(-) diff --git a/src/include/units/quantity.h b/src/include/units/quantity.h index 8dd98f5e..bfaae45f 100644 --- a/src/include/units/quantity.h +++ b/src/include/units/quantity.h @@ -158,8 +158,8 @@ namespace units { [[nodiscard]] static constexpr quantity min() noexcept { return quantity(quantity_values::min()); } [[nodiscard]] static constexpr quantity max() noexcept { return quantity(quantity_values::max()); } - [[nodiscard]] constexpr std::common_type_t operator+() const { return quantity(*this); } - [[nodiscard]] constexpr std::common_type_t operator-() const { return quantity(-count()); } + [[nodiscard]] constexpr quantity operator-() const { return quantity(-count()); } + [[nodiscard]] constexpr quantity operator+() const { return quantity(*this); } constexpr quantity& operator++() { @@ -214,18 +214,16 @@ namespace units { // clang-format off template - [[nodiscard]] std::common_type_t, quantity> - constexpr operator+(const quantity& lhs, - const quantity& rhs) + [[nodiscard]] constexpr Quantity operator+(const quantity& lhs, + const quantity& rhs) { using ret = std::common_type_t, quantity>; return ret(ret(lhs).count() + ret(rhs).count()); } template - [[nodiscard]] std::common_type_t, quantity> - constexpr operator-(const quantity& lhs, - const quantity& rhs) + [[nodiscard]] constexpr Quantity operator-(const quantity& lhs, + const quantity& rhs) { using ret = std::common_type_t, quantity>; return ret(ret(lhs).count() - ret(rhs).count()); @@ -249,12 +247,9 @@ namespace units { } template - requires treat_as_floating_point> || std::ratio_multiply::den == 1 - /* [[nodiscard]] */ quantity, upcasting_traits_t, - std::ratio_multiply>>, - std::common_type_t> - constexpr operator*(const quantity& lhs, - const quantity& rhs) + requires treat_as_floating_point> || (std::ratio_multiply::den == 1) + /* [[nodiscard]] */ constexpr Quantity operator*(const quantity& lhs, + const quantity& rhs) { using dim = dimension_multiply_t; using ret = quantity>>, std::common_type_t>; @@ -286,9 +281,8 @@ namespace units { } template - [[nodiscard]] std::common_type_t - constexpr operator/(const quantity& lhs, - const quantity& rhs) + [[nodiscard]] constexpr Number operator/(const quantity& lhs, + const quantity& rhs) { Expects(rhs != std::decay_t(0)); @@ -297,10 +291,9 @@ namespace units { } template - requires treat_as_floating_point> || std::ratio_divide::den == 1 - /* [[nodiscard]] */ quantity, upcasting_traits_t, std::ratio_divide>>, std::common_type_t> - constexpr operator/(const quantity& lhs, - const quantity& rhs) + requires treat_as_floating_point> || (std::ratio_divide::den == 1) + /* [[nodiscard]] */ constexpr Quantity operator/(const quantity& lhs, + const quantity& rhs) { Expects(rhs != std::decay_t(0)); @@ -310,18 +303,16 @@ namespace units { } template - [[nodiscard]] quantity> - constexpr operator%(const quantity& q, - const Rep2& v) + [[nodiscard]] constexpr Quantity operator%(const quantity& q, + const Rep2& v) { using ret = quantity>; return ret(ret(q).count() % v); } template - [[nodiscard]] std::common_type_t, quantity> - constexpr operator%(const quantity& lhs, - const quantity& rhs) + [[nodiscard]] constexpr Quantity operator%(const quantity& lhs, + const quantity& rhs) { using ret = std::common_type_t, quantity>; return ret(ret(lhs).count() % ret(rhs).count());