On Saturday, 25 May 2013 at 01:03:53 UTC, Namal wrote:

255 - 129 is less than 128 so the result is T.max, which is 255, which is not equal to 0.


I dont understand this at all 255 - 129 should be 126 in ubyte or not?

I checked, and operation between two ubyte is an int. When you cast that int to ubyte, it gets its least significant byte represented as ubyte.

import std.stdio;

void main() {
    ubyte x = 128;
    ubyte y = 129;
    writeln(cast(ubyte)(x - y)); //prints 255
    writeln(x - y); //prints -1
    writeln(typeof(x - y).stringof); //prints 'int' !!!!
}

Also, I tried the code you pasted, and the reason it fails the asserts is that there's something wrong in the if conditions in opBinary (and also, that 'rhs.max - rhs._value' didn't compile).

The following makes your asserts pass:

    ...
    static if (op == "-") {
        if(_value < rhs._value)
            return rhs.min;
    }
    static if (op == "+") {
        if(_value > max._value - rhs._value)
            return rhs.max;
    }
    ...


--jm

Reply via email to