Hi Following this report I had a closer look to this debug-dependent behavior which I agree about. I have added some checks to 2.cc as shown in the patch. Initially the test was failing because: /home/fdt/dev/gcc/git/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/2.cc:45: void test02(): Assertion 'old != istrb_eos' failed. This was coming from the __old._M_c = _M_sbuf->sbumpc() line in the post-increment operator. The post-increment is supposed to return a copy of the current iterator which this assignment is compromising. So I try to remove the assignment and test failed later: /home/fdt/dev/gcc/git/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/2.cc:104: void test02(): Assertion 'c == slit01[i]' failed. However, run in debug mode, it worked fine. The test is failing in normal mode because the iterator instantiation doesn't read the streambuf and without the previous __old._M_c assignment _M_c is still pointing to eos. In debug mode, _M_at_eof() initialize the iterator and so it work nicely. So for those reasons I would like to propose attached patch. Additionally it gets rid of the mutable usage. And I also remove a useless noexcept qualification on the defaulted copy constructor. François On 01/09/2017 11:10, Jonathan Wakely wrote: > On 24/08/17 12:57 +0300, Petr Ovtchenkov wrote: >> Explicit do sgetc from associated streambuf. Avoid debug-dependent >> sgetc (within _M_at_eof()): >> >> __glibcxx_requires_cond(!_M_at_eof(), >> _M_message(__gnu_debug::__msg_inc_istreambuf) >> ._M_iterator(*this)); >> >> Increment operators not require not-eof precoditions. >> >> Don't unlink associated streambuf if eof detected (in _M_get). >> >> Clean logic in postfix increment operator. > > I find it very hard to understand the reasons for this patch. What > you've written above is too terse for me. > > Are you fixing a bug? If so, do you have a testcase that demonstrates > the problem, and is fixed by these changes? > > Is this just refactoring, without changing behaviour? > > Finally, and very importantly, do you have a copyright assignment for > changes to GCC? See https://gcc.gnu.org/contribute.html#legal > > >