Under version 1.30.2 of Boost, I've noticed this problem:
In the file lexical_cast.hpp, the class lexical_cast throws this
exception:
bad_lexical_cast(typeid(Target), typeid(Source))
But the bad_lexical_cast constructor is defined thus:
bad_lexical_cast(
const std::type_info &s,
const std::type_info &t) :
source(&s), target(&t)
{
}
Notice the order of the arguments!
The result is that this code:
int i;
try {
int i = lexical_cast<int>("xx");
}
catch (bad_lexical_cast e) {
cout << "Source type is " << e.source_type().name() << endl;
cout << "Target type is " << e.target_type().name() << endl;
}
produces this surprising output:
Source type is int
Target type is char const *
(This is compiled under MSVC. GCC produces less legible output.)
--
Claus Tondering