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.
Janzert
More information about the Digitalmars-d
mailing list