http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51881

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-01-17 
13:07:04 UTC ---
(In reply to comment #0)
> Since stream_iterator.h _M_read() works on this copy (_M_value) the second
> application of operator >> () simply append 4 5 6 to the values already
> present.

You need to fix your operator>> so that it gives the value {4,5,6} to the foo
object, the bug is that you don't do that

This has nothing to do with istream_iterator, consider:

int main(int argc, char *argv[])
{
    std::stringstream ss;

    ss << "1 2 3\n4 5 6";

    foo f;
    f.v = std::vector<int>(3);
    ss >> f;
    std::cout << f << '\n';

    return 0;
}

This shows that your operator>> is buggy, it doesn't read a value from the
stream and set that value in the foo argument, it reads a value and appends it
to the foo argument.

You should reset the foo argument in your operator>>, or read into a temporary
then assign that to (or swap it with) the foo argument.

Reply via email to