[Bug libstdc++/80624] char_traits::eof() doesn't meet requirements
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80624 Jonathan Wakely changed: What|Removed |Added Status|ASSIGNED|RESOLVED Resolution|--- |FIXED Target Milestone|--- |8.0 --- Comment #4 from Jonathan Wakely --- Fixed for 8.1 and up, although it might need to be revisited as the "fix" is nearly as surprising as the bug itself.
[Bug libstdc++/80624] char_traits::eof() doesn't meet requirements
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80624 Martin Liška changed: What|Removed |Added CC||marxin at gcc dot gnu.org --- Comment #3 from Martin Liška --- Jonathan: Can you please update Known to work?
[Bug libstdc++/80624] char_traits::eof() doesn't meet requirements
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80624 --- Comment #2 from Jonathan Wakely --- Author: redi Date: Fri Jun 2 18:35:37 2017 New Revision: 248843 URL: https://gcc.gnu.org/viewcvs?rev=248843=gcc=rev Log: PR libstdc++/80624 satisfy invariant for char_traits::eof() PR libstdc++/80624 * doc/xml/manual/status_cxx2011.xml: Document to_int_type behaviour. * include/bits/char_traits.h (char_traits::to_int_type): Transform eof value to U+FFFD. * testsuite/21_strings/char_traits/requirements/char16_t/eof.cc: New. * testsuite/27_io/basic_streambuf/sgetc/char16_t/80624.cc: New. * testsuite/27_io/basic_streambuf/sputc/char16_t/80624.cc: New. Added: trunk/libstdc++-v3/testsuite/21_strings/char_traits/requirements/char16_t/eof.cc trunk/libstdc++-v3/testsuite/27_io/basic_streambuf/sgetc/char16_t/ trunk/libstdc++-v3/testsuite/27_io/basic_streambuf/sgetc/char16_t/80624.cc trunk/libstdc++-v3/testsuite/27_io/basic_streambuf/sputc/char16_t/ trunk/libstdc++-v3/testsuite/27_io/basic_streambuf/sputc/char16_t/80624.cc Modified: trunk/libstdc++-v3/ChangeLog trunk/libstdc++-v3/doc/xml/manual/status_cxx2011.xml trunk/libstdc++-v3/include/bits/char_traits.h
[Bug libstdc++/80624] char_traits::eof() doesn't meet requirements
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80624 --- Comment #1 from Jonathan Wakely --- Some more examples of misbehaviour caused by eof() being a valid character: #include #include int main() { std::basic_ostringstream s; s.put(u'\u'); assert( s.str().length() == 1 ); } a.out: ex.cc:8: int main(): Assertion `s.str().length() == 1' failed. Aborted (core dumped) #include int main() { std::basic_ostringstream s(u"foo"); s.exceptions(std::ios_base::badbit); s.put(u'\u'); } terminate called after throwing an instance of 'std::ios_base::failure' what(): basic_ios::clear Aborted (core dumped) #include #include int main() { const char16_t = u'\u'; std::basic_istringstream s(u"\uoo"); 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)
[Bug libstdc++/80624] char_traits::eof() doesn't meet requirements
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80624 Jonathan Wakely changed: What|Removed |Added Status|UNCONFIRMED |ASSIGNED Last reconfirmed||2017-05-04 Assignee|unassigned at gcc dot gnu.org |redi at gcc dot gnu.org Ever confirmed|0 |1