
We've noticed some changed behavior in a module that's using lexical_cast, having gone from 1.32.0 to 1.33.0. I tracked it down to this change: 1.32.0: bool operator>>(InputStreamable &output) { return !is_pointer<InputStreamable>::value && stream >> output && (stream >> std::ws).eof(); } 1.33.0: bool operator>>(InputStreamable &output) { return !is_pointer<InputStreamable>::value && stream >> output && stream.get() == #if defined(__GNUC__) && (__GNUC__<3) && defined(BOOST_NO_STD_WSTRING) // GCC 2.9x lacks std::char_traits<>::eof(). // We use BOOST_NO_STD_WSTRING to filter out STLport and libstdc++-v3 // configurations, which do provide std::char_traits<>::eof(). EOF; #else std::char_traits<char_type>::eof(); #endif } It turns out that we are passing a string containing a number with a trailing space. The 1.32.0 version of lexical_cast did not mind the trailing space, but the 1.33.0 version throws a bad_lexical_cast exception. I found that if I change this: stream.get() == to this: (stream >> std::ws).get() == that my issue goes away, but the workaround for compilers without the eof() function still works.... Would it be possilbe to add this into 1.34.0, or is this undesirable behavior? -------------------------------- John Wismar john.wismar@autozone.com