On Mon, 03 Jan 2011 09:56:30 -0500, spir <[email protected]> wrote:
On Mon, 03 Jan 2011 08:34:42 -0500
"Steven Schveighoffer" <[email protected]> wrote:
Yes, just use a data member:
struct MyRange {
int front;
bool empty;
void popFront();
}
A property is actually supposed to work just like a field.
There is no need for new syntax.
Hum, does not work by me (else I would not have posted ;-)
The compiler rejects the code complaining for missing opApply (which I
interpret as meaning it does not recognize a range in such an
interface). indeed, it works if manually implement iteration like for
instance:
while (! coll.empty) {
auto element = coll.front;
use(element);
coll.popFront();
}
But then there no property in play (I mean the compiler does not expect
a property set implementing a range).
That's a bug. isInputRange!S returns true.
There's nothing in the spec that says foreach requires those elements to
be functions. In fact, empty *does* work as a normal field, i.e. this
struct is foreachable:
struct S
{
@property int front() {return 0;}
bool empty;
void popFront() {empty = true;}
}
Filed:
http://d.puremagic.com/issues/show_bug.cgi?id=5403
-Steve