[Bug libstdc++/80624] char_traits<char16_t>::eof() doesn't meet requirements

redi at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon May 8 16:48:00 GMT 2017


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80624

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Some more examples of misbehaviour caused by eof() being a valid character:

#include <sstream>
#include <cassert>

int main()
{
 std::basic_ostringstream<char16_t> s;
 s.put(u'\uFFFF');
 assert( s.str().length() == 1 );
}

a.out: ex.cc:8: int main(): Assertion `s.str().length() == 1' failed.
Aborted (core dumped)


#include <sstream>

int main()
{
 std::basic_ostringstream<char16_t> s(u"foo");
 s.exceptions(std::ios_base::badbit);
 s.put(u'\uFFFF');
}

terminate called after throwing an instance of 'std::ios_base::failure'
 what():  basic_ios::clear
Aborted (core dumped)


#include <sstream>
#include <cassert>

int main()
{
  const char16_t ffff = u'\uFFFF';
  std::basic_istringstream<char16_t> s(u"\uFFFFoo");
  s.exceptions(std::ios_base::eofbit);
  assert( s.rdbuf()->in_avail() > 1 );
  auto c = s.get();
}

terminate called after throwing an instance of 'std::ios_base::failure'
  what():  basic_ios::clear
Aborted (core dumped)


More information about the Gcc-bugs mailing list