Boost logo

Boost Users :

From: Berny Cantos (xphere81_at_[hidden])
Date: 2007-07-03 05:33:51


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



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net