On Fri, 29 Jan 2010 11:33:17 -0500, Michel Fortin <michel.for...@michelf.com> wrote:

On 2010-01-29 11:18:46 -0500, Andrei Alexandrescu <seewebsiteforem...@erdani.org> said:

It should work for stream ranges if front() checks the "filled" flag and eats the next line if false, and popFront clears the "filled" flag.

So now you want the front to fetch from stdin on the first call? It's the same problem as 'byLine' eating the first line when you create it: neither one or the other should affect the stream.

No, you're reaching here :) What Andrei is doing is acknowledging that front has already performed the job of popFront. Because of the nature of streams, you cannot get the data from the stream, and leave it on the stream at the same time. It's just not feasible.

What the solution Andrei came up with does is to make stream ranges behave as close as possible to forward ranges. That small inconsistency will not hurt you because most of the time you are not calling front for an element you don't intend to use. And even within that paradigm, you are even less likely to use the stream in another capacity.

In other words, as the last usage of a range in an algorithm function, this:

r.front;
r.popFront();

is way more likely than:

r.popFront()
r.front;

-Steve

Reply via email to