On Saturday, 18 October 2014 at 08:22:25 UTC, monarch_dodra wrote:
On Friday, 17 October 2014 at 13:44:24 UTC, ketmar via
Digitalmars-d wrote:
On Fri, 17 Oct 2014 09:46:48 +0000
via Digitalmars-d <[email protected]> wrote:
In D (and C++) you would get:
if (x < ((x+1)&0xffffffff)){…}
perfect. nice and straightforward way to do overflow checks.
It wasn't an overflow check as ketmar suggested… It was a check
that should stay true, always for this instantiation. So the
wrong code is bypassed on overflow, possibly missing a
termination. The code would have been correct with an
optimization that set it to true or with a higher resolution
register.
Besides, the code uses x + 1, so the code is already in
undefined state. It's just as wrong as the "horrible code with
UB" we wère trying to avoid in the first place.
So much for convincing me that it's a good idea...
Not sure if you are saying that modulo-arithmetic as a default is
a bad or good idea?
In D and (C++ for uint) it is modulo-arithmetic so it is defined
as a circular type with at discontinuity which makes reasoning
about integers harder.