
-----Original Message----- From: boost-bounces@lists.boost.org [mailto:boost-bounces@lists.boost.org] On Behalf Of Stephan Diederich Sent: 09 April 2008 17:24 To: boost@lists.boost.org Subject: Re: [boost] [1.35][lexical_cast][concept check][range] Build errorandwarnings with MSVC8 on Warning Level 4
As we tried to update to 1.35 today, we found some warnings with MSVC on Warning Level 4 in:
lexical_cast: There was a return statement after a call to throw_exception which causes a unreachable code warning. I can see no problem by just removing that return. see http://svn.boost.org/trac/boost/ticket/1791
The problem code is:
throw_exception(bad_lexical_cast(typeid(Source), typeid(Target))); return Target(); // normally never reached (throw_exception)
Is the problem that the compiler can't be confident that throw_exception won't ever return? (For that matter, can we?)
Hm, I'm not sure what you mean. Do you think we exchange one warning with another? "Code not reachable" with "Missing return value"?. I think _we_ can be sure throw_exception does not return. throw_exception doc ( http://tinyurl.com/4vup33 ) says that even the user defined one is not allowed to return.
Well it actually says "Callers of throw_exception are allowed to assume that the function never returns; therefore, if the user-defined throw_exception returns, the behavior is undefined." 'Undefined' is not quite the same as 'won't happen'. In the worst case, the result of excuting the return statement might be less worse ;-) So is it still safer to keep the return? One statement is quite cheap ;-)
So would it be better to *suppress the warning* ?
I'm fine with that.
I'm fine with either - but I'm *not fine* with distracting warnings!
Thanks for looking into this!
cheers, stephan
with a push'n'pop around this:
#if (defined _MSC_VER) # pragma warning( push ) # pragma warning( disable : 4702 ) : unreachable code #endif
throw_exception(bad_lexical_cast(typeid(Source), typeid(Target))); return Target(); // normally never reached (throw_exception)
#if (defined _MSC_VER) # pragma warning( pop ) #endif
Paul
--- Paul A Bristow Prizet Farmhouse, Kendal, Cumbria UK LA8 8AB +44 1539561830 & SMS, Mobile +44 7714 330204 & SMS pbristow@hetp.u-net.com
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost