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