Opened 10 years ago
Closed 10 years ago
#7532 closed Bugs (wontfix)
lexical_cast fails on complex number with spaces
Reported by: | Owned by: | Antony Polukhin | |
---|---|---|---|
Milestone: | To Be Determined | Component: | lexical_cast |
Version: | Boost 1.50.0 | Severity: | Problem |
Keywords: | Cc: |
Description
Here's the test code that shows the problem:
#include <boost/lexical_cast.hpp> #include <iostream> #include <sstream> #include <string> typedef std::complex<double> Complex; int main() { std::string goodComplex("(1,2)"), badComplex("(1, 2)"); try { Complex foo = boost::lexical_cast<Complex>(goodComplex); std::cout << "goodComplex = " << foo << "\n"; } catch (boost::bad_lexical_cast const & e) { std::cerr << "goodComplex failed: " << e.what() << "\n"; } try { Complex foo = boost::lexical_cast<Complex>(badComplex); std::cout << "badComplex = " << foo << "\n"; } catch (boost::bad_lexical_cast const & e) { std::cerr << "badComplex failed: "<< e.what() << "\n"; } { /* Using a stringstream works, though. */ Complex foo; std::istringstream tmpStream(badComplex); tmpStream >> foo; std::cout << "badComplex printed with stringstream = " << foo << "\n"; } }
On my machine, with g++ 4.1.2, I get the following result:
goodComplex = (1,2) badComplex failed: bad lexical cast: source type value could not be interpreted as target badComplex printed with stringstream = (1,2)
For some reason, lexical_cast chokes on the space after the comma, but the stringstream has no problem.
Change History (2)
comment:1 by , 10 years ago
comment:2 by , 10 years ago
Resolution: | → wontfix |
---|---|
Status: | new → closed |
lexical_cast resets the ios_base::skipws
flag of an underlying stream object. This behaviour is what usually users want to have. It's unsafe to change it, because it would break some existing users code.
Note:
See TracTickets
for help on using tickets.
I verified that the bug is still present using the latest stable Boost, 1.51.0, and a newer compiler, g++4.5.4.