I don't know if this is a common problem, but I've sometimes encountered unexpected runtime issues caused by unsigned values being decremented below zero.

Example 1: "unsigned_value += negative_integer_value;"
Example 2: "for( size_t i = size - 1; i >= 0; --i )"

My compiler doesn't provide any compile-time or run-time warnings.

As far as I know, it's not possible to overload operators of primitive data types to check if the unsigned value is decremented below zero.

Do you know of any clever strategy to trace such cases at debug runtime, without having to add asserts all over the code? It's important that it does not affect performance in release mode.