Boost logo

Boost Users :

From: Johan RÃ¥de (rade_at_[hidden])
Date: 2006-07-26 10:34:35


袁晓辉 wrote:
> Thank you very much!
>
> I have two points now:
> 1. There may be something "improper" in the implementation of the C++
> standard library I used:
>
> #include <sstream>
> std::stringstream ss;
> ss << "9999999999999999999999999999999999999999";
> long long llVar = 0;
> if(!(ss >> llVar))
> {
> std::cout << "wrong!" << endl;
> }
> else
> {
> std::cout << llVar << endl;
> };
> Instead of printing "wrong!" it gives me nonsense(9223372036854775807).
> But if I change the type of llVar to "long", it will report an error as
> expected. It seems that only "long long" type has problem with
> stringstram here(I am using MS VS2005).
>
> 2. I do not disable exception in my project, because if I use type
> "long" with lexical_cast, it will throw a bad_lexical_cast exception
> when overflow occured.
>
>
> 2006/7/26, Meißner, Joachim [Rohmann GmbH] < meissner_at_[hidden]
> <mailto:meissner_at_[hidden]>>:
>
> Is it possible that you have disabled exceptions in your project?
>
> Regards, Joachim
> > Dear boost-users:
> >
> > I am really sorry for asking shch a silly question, but I
> > really need your help!
> >
> > boost::lexical_cast is a great function to do casting.. If I
> > want is to cast from string to a "long long" type value, I
> > can use the follow:
> >
> > long long llVar = lexical_cast<long long>("123456789");
> >
> > It is alright in this circs, but what if:
> >
> > lexical_cast<long
> > long>("9999999999999999999999999999999999999999999999999999999
> > 999999999999999999999");
> >
> > This is an obvious overflow, but I have no way to handle this
> > error, it returns a wrong number without throwing an exception!
> >
> > Any suggestion? Thank you very much!!!
> >
> > Kevin
> >
> >
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden] <mailto:Boost-users_at_[hidden]>
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users

I ran the following program on MSVS 2003

------------------------------------------

#include "boost/lexical_cast.hpp"

int main()
{
        long long a = boost::lexical_cast<long
long>("9999999999999999999999999999999999999999999999999999999999999999999999999999");
}

---------------------------------------------

and it throws a bad_lexical_cast.

And you says it does not throw on MSVS 2005.

Looks like Microsoft has messed up.

You might have to switch back to MSVS 2003 or roll your own conversion
function.

--Johan RÃ¥de


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