Hi,
I'm using boost::lexical_cast often in my application,
but then I use it to convert strings to integral types and the compiler (MSVC 7.1) threw me a warning:
C4701: local variable 'result' may be used without having been initialized
Looking at lexical_cast implementation I found this
template<typename Target, typename Source>
Target lexical_cast(Source arg)
{
detail::lexical_stream<Target, Source> interpreter;
// THIS is guilty of not been initialized
Target result;
if(!(interpreter << arg && interpreter >> result))
throw_exception(bad_lexical_cast(typeid(Source), typeid(Target)));
return result;
}
I was asking myself... why not use Fernando Cacciola's boost::value_initialized to avoid these warnings?
template<typename Target, typename Source>
Target lexical_cast(Source arg)
{
detail::lexical_stream<Target, Source> interpreter;
// This can't raise any uninitialized related warning
boost::value_initialized<Target> result;
if(!(interpreter << arg && interpreter >> get(result))) // Must use get idiom
throw_exception(bad_lexical_cast(typeid(Source), typeid(Target)));
return get(result); // Must use get idiom
}
Somebody can explain me this?
Is this warning a compiler issue?
Thanks in advance
Berny Cantos
AZ Interactive SL