On Wednesday, 16 March 2016 at 16:40:49 UTC, Shachar Shemesh wrote:
Please consider the following program, which is a reduced version of a problem I've spent the entire of today trying to debug:

import std.stdio;

void main() {
    enum ulong MAX_VAL = 256;
    long value = -500;

    if( value>MAX_VAL )
        value = MAX_VAL;

    writeln(value);
}

People who are marginally familiar with integer promotion will not be surprised to know that the program prints "256". What is surprising to me is that this produced neither error nor warning.

The comparable program in C++, when compiled with gcc, correctly warns about signed/unsigned comparison (though, to be fair, it seems that clang doesn't).

Yep. Integer promotions in D sucks! I like this example:

import std.stdio;

void main()
{
        short a = 10;
        short b = 5;
        short c = a - b;
}

It gives error: Error: cannot implicitly convert expression (cast(int)a - cast(int)b) of type int to short

Why I can't substract two values of the same type and assign to the variable of the same type directly without casts?! What a nonsense!?

Reply via email to