$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] Current Guidance on Compiler Warnings?
From: Gavin Lambert (boost_at_[hidden])
Date: 2018-11-28 02:47:35
On 28/11/2018 13:56, Emil Dotchevski wrote:
>> As should hopefully be obvious, implicit narrowing conversions are never
>> a good idea.
> 
> short f();
> 
> short x = f();
> short y = x+1; //Implicit conversion from int to short.
> 
> Do you think the compiler should warn in this case? Is the version below
> better? Safer?
> 
> short y = static_cast<short>(x+1);
No, that's a language defect.  In that context "1" should be of type 
short (because as a literal, it can be) and then it should apply "short 
operator+(short, short)", and then there would be no problem (assuming 
it doesn't overflow).
(Or as a general rule, the literal "1" should actually be type int8_t, 
because that's the smallest signed type which includes its value, and 
can always be safely implicitly extended to a larger type based on usage.)
I am aware that the language does not work like this currently.  This is 
one of the things that make it so easy to produce incorrect code.