incubator-stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Martin Sebor (JIRA)" <>
Subject [jira] Commented: (STDCXX-645) stream iterators into different streams compare equal
Date Wed, 28 Nov 2007 21:36:44 GMT


Martin Sebor commented on STDCXX-645:

I would have been tempted to say that operator==() will be called much more often than operator++().
I looked at num_get and money_get (both of which actually use istreambuf_iterator, not istream_iterator),
to see if I could find any support for my hypothesis. Here's what I found:

num_get calls both functions exactly once in each iteration of the loop. It also dereferences
the iterator exactly once. There is exactly one such call for each of the operators in the
body of the loop.

money_get makes up to four calls to operator++() and operator*() in each iteration, and five
calls to operator==() (or the inverse of it). There are four and five call sites, respectively,
for the functions.

If we can draw any conclusion out of this at all it would seem to be slightly in favor of
keeping operator==() light-weight and adding the checking logic to operator++().

> stream iterators into different streams compare equal
> -----------------------------------------------------
>                 Key: STDCXX-645
>                 URL:
>             Project: C++ Standard Library
>          Issue Type: Bug
>          Components: 24. Iterators
>    Affects Versions: 4.1.3, 4.2.0
>            Reporter: Mark Brown
> As Travis says in his reply to my post here:
>     Given p1 and p2, it is pretty clear to me that the two iterators are both
non-end-of-stream type, and they are both created on different streams. The streams are different,
so the iterators should not compare equal. I guess one could claim that p6 conflicts
with 24.5 p3 because 'end-of-stream' isn't clearly defined, but in this particular case that
doesn't matter.
> This program aborts with stdcxx but not with gcc:
> #include <assert.h>
> #include <iterator>
> #include <sstream>
> int main ()
> {
>     std::istringstream a ("1");
>     std::istream_iterator<int> i (a);
>     std::istringstream b ("2");
>     std::istream_iterator<int> j (b);
>     assert (!(i == j));
> } 

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message