On Mon, 03 Jan 2011 10:27:17 -0500 "Steven Schveighoffer" <schvei...@yahoo.com> wrote:
> On Mon, 03 Jan 2011 09:56:30 -0500, spir <denis.s...@gmail.com> wrote: > > > On Mon, 03 Jan 2011 08:34:42 -0500 > > "Steven Schveighoffer" <schvei...@yahoo.com> 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 All right. great that we can do that (provide a plain data member where a property is expected). denis -- -- -- -- -- -- -- vit esse estrany ☣ spir.wikidot.com