On Sunday, 31 October 2021 at 05:04:33 UTC, Dom DiSc wrote:
This should be no surprise. You need to know what the resulting type of int + uint should be. And it is ...... uint! which is one of the stupit integer-promotion rules inherited from C.
In C++ it is undefined behaviour to take the absolute value of a value that has no positive representation. I assume the same is true for C? So you can write a compiler that detects it and fails.
You cannot do this in D as int is defined to represent an infinite set of numbers (mapped as a circle). So in D, you could say that the abs of the most negative value is a positive value that is represented as a negative due to circular wrapping.
If this happens in C then it is a bug. If it happens in D, then it is a defined feature of the language.