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.
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@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users