Boost logo

Boost :

From: Paul A Bristow (pbristow_at_[hidden])
Date: 2008-04-09 12:36:04


 

>-----Original Message-----
>From: boost-bounces_at_[hidden]
>[mailto:boost-bounces_at_[hidden]] On Behalf Of Stephan Diederich
>Sent: 09 April 2008 17:24
>To: boost_at_[hidden]
>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_at_[hidden]
>>
>>
>>
>> _______________________________________________
>> Unsubscribe & other changes:
>http://lists.boost.org/mailman/listinfo.cgi/boost
>>
>_______________________________________________
>Unsubscribe & other changes:
>http://lists.boost.org/mailman/listinfo.cgi/boost
>


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