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

            Bug ID: 97719
           Summary: "Implement C++20 features for <sstream>" changed
                    behavior of istreambuf_iterator
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: rodgertq at gcc dot gnu.org
  Target Milestone: ---

from mailing list -

On 07/10/2020 18:55, Thomas Rodgers wrote:
From: Thomas Rodgers <trodg...@redhat.com>
New ctors and ::view() accessor for -
  * basic_stingbuf
  * basic_istringstream
  * basic_ostringstream
  * basic_stringstreamm
New ::get_allocator() accessor for basic_stringbuf.
I found that this
<https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=a0e4d7b44c544c84cffc7ff9c64b6f1af14fb08d>
"libstdc++: Implement C++20 features for <sstream>" changed the behavior of

$ cat test.cc
#include <iostream>
#include <iterator>
#include <sstream>
int main() {
 std::stringstream s("a");
 std::istreambuf_iterator<char> i(s);
 if (i != std::istreambuf_iterator<char>()) std::cout << *i << '\n';
}
$ g++ -std=c++20 test.cc
$ ./a.out

from printing "a" to printing nothing.  (The `i != ...` comparison appears to
change i from pointing at "a" to pointing to null, and returns false.)

I ran into this when building LibreOffice, and I hope test.cc is a faithfully
minimized reproducer.  However, I know little about std::istreambuf_iterator,
so it may well be that the code isn't even valid.

Reply via email to