From 0774eaaf0c221b3fed68e866130abafa2890880c Mon Sep 17 00:00:00 2001 From: Hodlinator <172445034+hodlinator@users.noreply.github.com> Date: Thu, 23 Apr 2026 16:58:16 +0200 Subject: [PATCH] util: Require integers for SaturatingAdd() and AdditionOverflow() Previously we could fall back to using an unspecialized implementation of std::numeric_limits which would compile as long as the numeric operators existed, but would return 0 for min() & max(). --- src/util/overflow.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/util/overflow.h b/src/util/overflow.h index 274ba0454e3..48732838ac8 100644 --- a/src/util/overflow.h +++ b/src/util/overflow.h @@ -13,10 +13,9 @@ #include #include -template +template [[nodiscard]] bool AdditionOverflow(const T i, const T j) noexcept { - static_assert(std::is_integral_v, "Integral required."); if constexpr (std::numeric_limits::is_signed) { return (i > 0 && j > std::numeric_limits::max() - i) || (i < 0 && j < std::numeric_limits::min() - i); @@ -41,7 +40,7 @@ template return true; } -template +template [[nodiscard]] T SaturatingAdd(const T i, const T j) noexcept { if constexpr (std::numeric_limits::is_signed) {