|
Boost : |
Subject: Re: [boost] [units] gcc warnings
From: Emil Dotchevski (emil_at_[hidden])
Date: 2010-06-17 02:28:24
On Wed, Jun 16, 2010 at 10:16 AM, Stewart, Robert
<Robert.Stewart_at_[hidden]> wrote:
> I don't see how static_cast would be able to hide an error.
The general point is that casts do more than simply silence warnings. Example:
void foo( short x );
int value();
....
foo(static_cast<short>(value())); //static_cast used to suppresses a warning
Later under maintenance we introduce an additional foo overload:
void foo( long x );
Now the call to foo with the static_cast<short> will continue to
compile while without the static_cast you'd get a compile error.
> I suggested an assertion in addition to the static_cast to verify the behavior as
> a defense against maintenance effects. Assuming the type is always short,
> then asserting the current value less-than std::numeric_limits<short>::max()
> would suffice. To account for your change of type scenario, a compile-time
> assertion that the type is short would also be needed.
I'll illustrate with code again:
void foo( short a, short b )
{
short result=a+b;
....
}
In general, I find it difficult to accept this instead:
void foo( short a, short b )
{
int tmp=a+b;
short result=static_cast<short>(tmp);
assert(result==tmp);
....
}
In some specific case -- maybe, but I can't justify asserts every time
I deal with shorts (which admittedly isn't very often.)
Emil Dotchevski
Reverge Studios, Inc.
http://www.revergestudios.com/reblog/index.php?n=ReCode
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk