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