4e39f563c0
Similar to the bugs I fixed recently in istream::ignore, we incorrectly set eofbit too often in operator>>(istream&, string&) and operator>>(istream&. char(&)[N]). We should only set eofbit if we reach EOF but would have kept going otherwise. If we've already extracted the maximum number of characters (whether that's because of the buffer size or the istream's width()) then we should not set eofbit. libstdc++-v3/ChangeLog: * include/bits/basic_string.tcc (operator>>(basic_istream&, basic_string&)): Do not set eofbit if extraction stopped after in.width() characters. * src/c++98/istream-string.cc (operator>>(istream&, string&)): Likewise. * include/bits/istream.tcc (__istream_extract): Do not set eofbit if extraction stopped after n-1 characters. * src/c++98/istream.cc (__istream_extract): Likewise. * testsuite/21_strings/basic_string/inserters_extractors/char/13.cc: New test. * testsuite/21_strings/basic_string/inserters_extractors/wchar_t/13.cc: New test. * testsuite/27_io/basic_istream/extractors_character/char/5.cc: New test. * testsuite/27_io/basic_istream/extractors_character/wchar_t/5.cc: New test. |
||
---|---|---|
.. | ||
basic_filebuf | ||
basic_fstream | ||
basic_ifstream | ||
basic_ios | ||
basic_iostream | ||
basic_istream | ||
basic_istringstream | ||
basic_ofstream | ||
basic_ostream | ||
basic_ostringstream | ||
basic_streambuf | ||
basic_stringbuf | ||
basic_stringstream | ||
filesystem | ||
fpos | ||
headers | ||
ios_base | ||
manipulators | ||
objects | ||
types | ||
rvalue_streams-2.cc | ||
rvalue_streams.cc |