diff --git a/src/util/mpz.cpp b/src/util/mpz.cpp index 74430a1304..9441d48617 100644 --- a/src/util/mpz.cpp +++ b/src/util/mpz.cpp @@ -41,7 +41,7 @@ static bool mul_overflows(int64_t a, int64_t b, int64_t & result) { // Overflow if high bits are not the sign extension of result return high != (result < 0 ? -1 : 0); #elif defined(_MSC_VER) - // Extract magnitudes without ever evaluating -INT64_MIN. + // `-(v + 1) + 1` computes |v| without ever evaluating -INT64_MIN. uint64_t x = a < 0 ? static_cast(-(a + 1)) + 1 : static_cast(a); uint64_t y = b < 0 ? static_cast(-(b + 1)) + 1 : static_cast(b); bool is_neg = (a < 0) != (b < 0); @@ -55,7 +55,7 @@ static bool mul_overflows(int64_t a, int64_t b, int64_t & result) { result = static_cast(magnitude); return false; #else - static_assert(false); +#error "No mul_overflows implementation for this compiler" #endif }