disabling unary "-" for unsigned types

Janzert janzert at janzert.com
Mon Feb 15 14:53:33 PST 2010

Andrei Alexandrescu wrote:
> Justin Johansson wrote:
>> Andrei Alexandrescu wrote:
>>> ulong x0;
>>> static assert(!__traits(compiles, -x0));
>>> uint x1;
>>> static assert(!__traits(compiles, -x1));
>>> ushort x2;
>>> static assert(!__traits(compiles, -x2));
>>> ubyte x3;
>>> static assert(!__traits(compiles, -x3));
>>> Sounds good?
>>> Andrei
>> Sounds excellent.  Who would have thought of that?
>> Cheers
>> Justin Johansson
> Actually Walter just talked me into forgetting about it. -x is
> conceptually rewritten into ~x + 1 for all types and typed accordingly.
> I'm dropping this in order to keep focused on more important changes.
> Andrei

I just want to add I'm glad to see this is staying since I use (x & -x)
rather frequently on unsigned types to get one set bit. Obviously I
could just expand it to the full ~x + 1 but the current idiom is nice,
short and easily recognizable.


More information about the Digitalmars-d mailing list