Opened 10 years ago

Closed 10 years ago

#7532 closed Bugs (wontfix)

lexical_cast fails on complex number with spaces

Reported by: J. J. Ramsey <jjramsey@…> 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 J. J. Ramsey <jjramsey@…>, 10 years ago

I verified that the bug is still present using the latest stable Boost, 1.51.0, and a newer compiler, g++4.5.4.

comment:2 by Antony Polukhin, 10 years ago

Resolution: wontfix
Status: newclosed

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.