On 7/12/17 5:24 PM, Johan Engelen wrote:
On Wednesday, 12 July 2017 at 20:12:03 UTC, Steven Schveighoffer wrote:
...
Which means this may cause a bunch of nuisance errors.

It's a trade-off between nuisance in some cases (the Phobos ones can be solved with val = abs(val), or with static if), and possibly catching bugs in other cases.

We can compare this with negation of a bool and subtracting a bool:
```
bool b;
auto x = 1 - b; // allowed
auto y = -b; // not allowed
```


My only point is with Andrei's assertion that it "exposed two bugs in Phobos".

In terms of the trade-off, it looks like this is just a straight bug that should be fixed. If the behavior goes back to being like C, is it still so bad that it needs an error?

My testing:

import std.stdio;
void main()
{
    ubyte x = 5;
    int y = -x;
    writeln(y);
    uint t = 0;
    t += x;
    writeln(t);
    t += y;
    writeln(t);
}

outputs:
251
5
256

In C:

#include <stdio.h>
int main()
{
    unsigned char x = 5;
    int y = -x;
    printf("%d\n", y);
    unsigned int t = 0;
    t += x;
    printf("%u\n", t);
    t += y;
    printf("%u\n", t);
    return 0;
}

outputs:
-5
5
0

The C behavior seems fine to me.

-Steve

Reply via email to