From 565465d284708cd70ccbdb9366ca40f1e1453f13 Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Mon, 10 Apr 2023 19:55:25 +0200 Subject: [PATCH] fix: `angular` trigonometric functions now can be constrained with `QuantityOf` --- .../include/mp_units/systems/isq_angle/isq_angle.h | 4 ++-- src/utility/include/mp_units/math.h | 7 +++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/systems/isq_angle/include/mp_units/systems/isq_angle/isq_angle.h b/src/systems/isq_angle/include/mp_units/systems/isq_angle/isq_angle.h index 0f325c3f..43d8b260 100644 --- a/src/systems/isq_angle/include/mp_units/systems/isq_angle/isq_angle.h +++ b/src/systems/isq_angle/include/mp_units/systems/isq_angle/isq_angle.h @@ -33,8 +33,8 @@ using namespace isq; // ISQ angular derived quantities redefinition QUANTITY_SPEC(cotes_angle_constant, angular::angle); // 1 rad -QUANTITY_SPEC(angular_measure, cotes_angle_constant* arc_length / radius); -QUANTITY_SPEC(rotational_displacement, cotes_angle_constant* path_length / radius); +QUANTITY_SPEC(angular_measure, angular::angle, cotes_angle_constant* arc_length / radius); +QUANTITY_SPEC(rotational_displacement, angular::angle, cotes_angle_constant* path_length / radius); inline constexpr auto angular_displacement = rotational_displacement; QUANTITY_SPEC(phase_angle, angular_measure); QUANTITY_SPEC(solid_angular_measure, pow<2>(cotes_angle_constant) * area / pow<2>(radius)); diff --git a/src/utility/include/mp_units/math.h b/src/utility/include/mp_units/math.h index e3e9ee2c..4cb24dc3 100644 --- a/src/utility/include/mp_units/math.h +++ b/src/utility/include/mp_units/math.h @@ -354,8 +354,7 @@ template Q> namespace angular { -// TODO cannot use `QuantityOf` as it is not interconvertible with `isq_angle::angular_measure` -template Q> +template Q> requires treat_as_floating_point [[nodiscard]] inline QuantityOf auto sin(const Q& q) noexcept requires requires { sin(q.number()); } || requires { std::sin(q.number()); } @@ -364,7 +363,7 @@ template Q> return sin(q[radian].number()) * one; } -template Q> +template Q> requires treat_as_floating_point [[nodiscard]] inline QuantityOf auto cos(const Q& q) noexcept requires requires { cos(q.number()); } || requires { std::cos(q.number()); } @@ -373,7 +372,7 @@ template Q> return cos(q[radian].number()) * one; } -template Q> +template Q> requires treat_as_floating_point [[nodiscard]] inline QuantityOf auto tan(const Q& q) noexcept requires requires { tan(q.number()); } || requires { std::tan(q.number()); }