"Unsigned-related bugs never occur in real code."
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Thu Jan 21 16:19:03 PST 2010
Rainer Deyke wrote:
> Andrei Alexandrescu wrote:
>> std.traits has a Unsigned template. I plan to add two functions:
>> signed(x) and unsigned(x), which transform the integral x into the
>> signed/unsigned integral of the same size. Generic code could then call
>> signed or unsigned wherever necessary. For abs, they'd have to call
>> abs(signed(expr)) which I believe clarifies intent and averts bugs like
>> mine.
>
> It would also be completely and utterly wrong. The correct replacement
> is this:
>
> T result;
> if (isSigned!T) {
> result = abs(v);
> } else {
> result = v;
> }
>
> ....which works, but is a lot less concise than simply saying
> 'v = abs(v)'. If I ever found myself writing the above in actual code,
> I'd be tempted to factor it out into its own function, call that
> function 'abs', and consistently use that function instead of the 'abs'
> in Phobos.
Depends! In my case, your fix is wrong.
Andrei
More information about the Digitalmars-d
mailing list