Why is this not a warning?
tsbockman via Digitalmars-d
digitalmars-d at puremagic.com
Thu Mar 17 02:13:34 PDT 2016
On Thursday, 17 March 2016 at 06:55:34 UTC, Shachar Shemesh wrote:
> On 16/03/16 23:50, tsbockman wrote:
>> On Wednesday, 16 March 2016 at 16:40:49 UTC, Shachar Shemesh
>> wrote:
>>> ...
>>>
>>> People who are marginally familiar with integer promotion
>>> will not be
>>> surprised to know that the program prints "256". What is
>>> surprising to
>>> me is that this produced neither error nor warning.
>>>
>>> The comparable program in C++, when compiled with gcc,
>>> correctly warns
>>> about signed/unsigned comparison (though, to be fair, it
>>> seems that
>>> clang doesn't).
>>
>> While this particular issue can and should be addressed in the
>> compiler
>> (see my other reply), in the mean time how about trying out my
>> `checkedint` DUB package?
>
> I'm afraid that paying run-time cost to verify correctness is
> out of the question for the type of product weka is building.
You could use the `DebugInt` wrapper. It aliases to `SafeInt` in
debug and unittest mode, to find problems (many, including the
specific one in this thread, are detected at compile time). Then,
in release mode, it aliases to the built-in types for maximum
speed.
Also, for almost all real world programs only a small percentage
of the code actually affects performance much. Using `SafeInt` or
`SmartInt`*everywhere* in a release build will reduce performance
by about 30% - but using it *almost* everywhere, except in the
program's hot spots, shouldn't measurably reduce performance at
all.
More information about the Digitalmars-d
mailing list