On 10/30/21 10:04 PM, Dom DiSc wrote:
> On Friday, 29 October 2021 at 14:20:09 UTC, Ali Çehreli wrote:
>> Unsigned!T abs(T)(const(T) x) if(isIntegral!T)
>> {
>>    static if(isSigned!T) if(x < 0) return cast(Unsigned!T)-x;
>>    return x;
>> }
>>
>> void main() {
>>   int a = -5;
>>   int b = -4;
>>   writeln(a + abs(b)); // -5 + 4 == -1? (No!)
>> }
>>
>> The program prints uint.max.
>
> This should be no surprise. You need to know what the resulting type of
> int + uint should be.

Yes, the programmer knew all that when they wrote that code when abs() behaved the way it behaves today.

The code is an example of why abs() cannot be changed today to what you propose. It would be a bad kind of breaking change: No compilation error, no run-time error (if unlucky), and a weird bug 42 months from today.

Ali


Reply via email to