
[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/