0 < negative loop condition bug or misunderstanding on my part
Sean Cavanaugh
WorksOnMyMachine at gmail.com
Wed Mar 7 11:20:41 PST 2012
On 3/7/2012 12:57 PM, Jonathan M Davis wrote:
> On Wednesday, March 07, 2012 11:01:05 Timon Gehr wrote:
>> On 03/07/2012 07:05 AM, ixid wrote:
>>> Ah, thank you, so it's wrapping. That seems like a bad idea, what is the
> I suspect that the reality of the matter is that if we disallowed implicit
> conversions between signed and unsigned, a number of bugs would completely go
> away, but others would creep in as a result, and the overal situation wouldn't
> necessarily be any better, but I don't know. My initial reaction would be to
> agree with you, but there are definitely cases where such an approach would get
> annoying and bug-prone (due to the casting involved). But regardless, I really
> don't think that you're going to convince Walter on this one, given what he's
> said in the past.
>
> - Jonathan M Davis
After writing enough container libraries and whatnot in C++, I always
end up going bed while thinking life would be so much easier if implicit
signed/unsigned conversions were not allowed.
Then I go to sleep, wake up, and realize how much more horrific the code
would be in other places if this was actually true.
The best compromise would probably have been to make size_t signed when
migrating to 64 bit memory addressing, and leave the unsigned/signed
problems specificaly with size_t values back in the past of 32 bit and
older systems.
On a related note I would love to see something in std.somewhere (conv?)
to provide a complete set of narrowing and signed/unsigned conversion
functions: The matrix is basically the following methods:
1) Reduce size (64->32->16->8 bits) but maintain signedness with three
types:
2) Methods to flip signedness of the value (but mainting bitwidth)
multiplied against three types of operations:
a) truncating (i.e. mask off the lower bits)
b) saturating (values outside of range are clamped to min or max of the
narrower range)
c) throwing (values outside of narrow range throw a range exception)
More information about the Digitalmars-d-learn
mailing list