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