#include #include #include bool checked_add(int a, int b, int& result) noexcept { const int low = std::numeric_limits::min(); const int high = std::numeric_limits::max(); if ((b > 0 && a > high - b) || (b < 0 && a < low - b)) { return false; } result = a + b; return true; } int main() { int result = 99; bool ok = checked_add(12, 30, result); assert(ok && result == 42); ok = checked_add(std::numeric_limits::max(), 1, result); assert(!ok && result == 42); ok = checked_add(std::numeric_limits::min(), -1, result); assert(!ok && result == 42); ok = checked_add(std::numeric_limits::min(), 0, result); assert(ok && result == std::numeric_limits::min()); ok = checked_add(-5, 7, result); assert(ok && result == 2); std::cout << result << '\n'; }