diff --git a/src/core/include/units/math.h b/src/core/include/units/math.h index 21b202d4..b54e9a3f 100644 --- a/src/core/include/units/math.h +++ b/src/core/include/units/math.h @@ -155,9 +155,13 @@ template */ template [[nodiscard]] constexpr quantity floor(const quantity& q) noexcept - requires (!treat_as_floating_point) || + requires ((!treat_as_floating_point) || requires { floor(q.number()); } || - requires { std::floor(q.number()); } + requires { std::floor(q.number()); }) && + (std::same_as || requires { + ::units::quantity_cast(q); + quantity::one(); + }) { const auto handle_signed_results = [&](const T& res) { if (res > q) @@ -191,9 +195,13 @@ template */ template [[nodiscard]] constexpr quantity ceil(const quantity& q) noexcept - requires (!treat_as_floating_point) || + requires ((!treat_as_floating_point) || requires { ceil(q.number()); } || - requires { std::ceil(q.number()); } + requires { std::ceil(q.number()); }) && + (std::same_as || requires { + ::units::quantity_cast(q); + quantity::one(); + }) { const auto handle_signed_results = [&](const T& res) { if (res < q)