diff --git a/src/utility/include/units/math.h b/src/utility/include/units/math.h index c93e87b5..b18114f0 100644 --- a/src/utility/include/units/math.h +++ b/src/utility/include/units/math.h @@ -109,7 +109,7 @@ template * @param q Quantity being the base of the operation * @return Quantity The value of the same quantity type */ -template Q> +template Q> [[nodiscard]] inline Q exp(const Q& q) requires requires { exp(q.number()); } || requires { std::exp(q.number()); } { @@ -299,7 +299,7 @@ template namespace isq { -template Q> +template Q> requires treat_as_floating_point [[nodiscard]] inline quantity_of auto sin(const Q& q) noexcept requires requires { sin(q.number()); } || requires { std::sin(q.number()); } @@ -308,7 +308,7 @@ template Q> return quantity{sin(q[si::radian].number())}; } -template Q> +template Q> requires treat_as_floating_point [[nodiscard]] inline quantity_of auto cos(const Q& q) noexcept requires requires { cos(q.number()); } || requires { std::cos(q.number()); } @@ -317,7 +317,7 @@ template Q> return quantity{cos(q[si::radian].number())}; } -template Q> +template Q> requires treat_as_floating_point [[nodiscard]] inline quantity_of auto tan(const Q& q) noexcept requires requires { tan(q.number()); } || requires { std::tan(q.number()); } @@ -326,7 +326,7 @@ template Q> return quantity{tan(q[si::radian].number())}; } -template Q> +template Q> requires treat_as_floating_point [[nodiscard]] inline quantity_of auto asin(const Q& q) noexcept requires requires { asin(q.number()); } || requires { std::asin(q.number()); } @@ -335,7 +335,7 @@ template Q> return asin(quantity_cast(q).number()) * angular_measure[si::radian]; } -template Q> +template Q> requires treat_as_floating_point [[nodiscard]] inline quantity_of auto acos(const Q& q) noexcept requires requires { acos(q.number()); } || requires { std::acos(q.number()); } @@ -344,7 +344,7 @@ template Q> return acos(quantity_cast(q).number()) * angular_measure[si::radian]; } -template Q> +template Q> requires treat_as_floating_point [[nodiscard]] inline quantity_of auto atan(const Q& q) noexcept requires requires { atan(q.number()); } || requires { std::atan(q.number()); } @@ -357,7 +357,8 @@ template Q> namespace angular { -template Q> +// TODO cannot use `weak_quantity_of` as it is not interconvertible with `isq_angle::angular_measure` +template Q> requires treat_as_floating_point [[nodiscard]] inline quantity_of auto sin(const Q& q) noexcept requires requires { sin(q.number()); } || requires { std::sin(q.number()); } @@ -366,7 +367,7 @@ template Q> return quantity{sin(q[radian].number())}; } -template Q> +template Q> requires treat_as_floating_point [[nodiscard]] inline quantity_of auto cos(const Q& q) noexcept requires requires { cos(q.number()); } || requires { std::cos(q.number()); } @@ -375,7 +376,7 @@ template Q> return quantity{cos(q[radian].number())}; } -template Q> +template Q> requires treat_as_floating_point [[nodiscard]] inline quantity_of auto tan(const Q& q) noexcept requires requires { tan(q.number()); } || requires { std::tan(q.number()); } @@ -384,7 +385,7 @@ template Q> return quantity{tan(q[radian].number())}; } -template Q> +template Q> requires treat_as_floating_point [[nodiscard]] inline quantity_of auto asin(const Q& q) noexcept requires requires { asin(q.number()); } || requires { std::asin(q.number()); } @@ -393,7 +394,7 @@ template Q> return asin(quantity_cast(q).number()) * angle[radian]; } -template Q> +template Q> requires treat_as_floating_point [[nodiscard]] inline quantity_of auto acos(const Q& q) noexcept requires requires { acos(q.number()); } || requires { std::acos(q.number()); } @@ -402,7 +403,7 @@ template Q> return acos(quantity_cast(q).number()) * angle[radian]; } -template Q> +template Q> requires treat_as_floating_point [[nodiscard]] inline quantity_of auto atan(const Q& q) noexcept requires requires { atan(q.number()); } || requires { std::atan(q.number()); }