Boost logo

Boost :

From: Fernando Cacciola (fernando_cacciola_at_[hidden])
Date: 2005-12-19 18:17:53


[Thank you Thorsten for pointing me to this]

Hi Thorsten
Hi Paul

>>> > my impression is that most of the warnings look spurious.
>>> How many warnings? what type of warning?
>>
>> Dozens - mostly data loss on conversion, unsigned/signed,
>> untidynesses like unused parameters. I don't want to alter Moshiers
>> code at all (yet).
>
> well, I suggest that you do a numeric_cast in debug-mode and a
> static_cast in release-mode. That way you don't alter his code's
> behavior, but get rid of the warnings.
>
> We really should have something like
>
> asserting_numeric_cast<T>( u )
>
> in cast.hpp
>

That would range check but only in a DEBUG build right?

The problem I have with this is that it hides the fact that range checking
is disabled in a release build.

A better solution, IMO, is to use something like:

assert( is_in_range<T>(u) ) ;
T t = static_cast<T>(u) ;

which makes it clear that out of range conversions are "exceptional"
(unexpected) and so are "asserted" rather than "always checked".

The Boost Numeric Conversion Library already provides a stand alone range
checking functionality through:

numeric::converter<T,S>::out_of_range(u) == cInRange

But granted, that is far from terse... I guess the library should have a
shortcut for that in the form of template function "is_in_range<>"

I'll add that one.

Best

Fernando Cacciola
SciSoft
http://fcacciola.50webs.com/


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk