diff --git a/src/numeric.h b/src/numeric.h index 1b5e0ec..54df738 100644 --- a/src/numeric.h +++ b/src/numeric.h @@ -75,7 +75,7 @@ namespace lwsf { namespace internal safe_integer& subtract(safe_integer rhs) { - if (value_ - std::numeric_limits::min() < rhs.value_) + if ((0 < rhs.value_ && value_ < std::numeric_limits::min() < rhs.value_) || (rhs.value_ < 0 && value_ > std::numeric_limits::max() + rhs.value_)) throw std::underflow_error{"safe_integer underflow in subtraction"}; value_ -= rhs.value_; return *this;