On Saturday, 19 March 2016 at 10:24:41 UTC, Ola Fosheim Grøstad
wrote:
On Saturday, 19 March 2016 at 10:01:41 UTC, Basile B. wrote:
On Saturday, 19 March 2016 at 09:33:25 UTC, tsbockman wrote:
[...] The reason that *attempting* such a comparison produces
such weird results, is because the signed value is being
implicitly cast to an unsigned type.
Yes and that's the opposite that should happend: when signed
and unsigned are mixed in a comparison, the unsigned value
should be implictly cast to a wider signed value. And then it
works!
- https://issues.dlang.org/show_bug.cgi?id=15805
-
https://github.com/BBasile/iz/blob/v0.5.8/import/iz/sugar.d#L1017
I have no problem with C++ compilers complaining about
signed/unsigned comparisons. It sometimes means you should
reconsider the comparison, so it leads to better code.
The better solution is to add 7, 15, 31 and 63 bit unsigned
integer types that safely converts to signed (this is what Ada
does)
FPC (Object Pascal) too, but that not a surpise since it's in the
same family
and remove implicit conversion for unsigned 8,16,32, and 64 bit
integers.
Yes that's almost that but in D the only solution I see is like
in my template: widening. When widening is not possible (mainly
on X86_64) then warning. The problem is that cent and ucent are
not implemented, otherwise it would always work even on 64 bit OS.
I'd like to propose a PR for this (not for cent/ucent but for
the widening) but it looks a bit overcomplicated for a first
contrib in the compiler...