This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug libstdc++/46906] istreambuf_iterator is late?
- From: "marc.glisse at normalesup dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 05 Sep 2011 12:38:13 +0000
- Subject: [Bug libstdc++/46906] istreambuf_iterator is late?
- Auto-submitted: auto-generated
- References: <bug-46906-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46906
--- Comment #7 from Marc Glisse <marc.glisse at normalesup dot org> 2011-09-05 12:38:13 UTC ---
(In reply to comment #6)
> 1) The fact that repeated calls of operator* without intervening operator++
> calls produce the same result for a given iterator object is required by
> expression *a:
>
> "The expression (void)*a, *a is equivalent to *a."
There are operations between the 2 calls to operator*.
> This explains the repeated values '1' and '1' from it1 and '2' and '2' from
> it2.
Oh, are you saying that this rule has priority over the one that says that
operator* just forwards to sgetc? That would actually require
istreambuf_iterator to keep the last value in cache the way libstdc++ does. If
that's the case, I believe it would be worth mentioning in the standard (it's
not just me, when I filed the bug report I had found at least one
implementation that did not cache, Roguewave (haven't checked more recent
Apache versions)).
For a vector, touching the vector between 2 dereferencing of the same iterator
invalidates the iterator. Here, my guess was that it didn't invalidate the
iterator and we should blindly call sgetc. But your explanation makes sense.