Unexpected foreach lowering
Lodovico Giaretta via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Aug 10 11:47:02 PDT 2016
On Wednesday, 10 August 2016 at 18:38:00 UTC, Ali Çehreli wrote:
> RangeWrapper does not provide the InputRange interface, so the
> compiler uses 'alias this' and iterates directly on the member
> range.
>
> I tried making RangeWrapper an InputRange but failed. It still
> uses 'range'.
>
> // Still fails with these:
> @property bool empty() {
> return range.empty;
> }
>
> void popFront() {
> range.popFront();
> }
>
> I don't know how the decision process works there.
>
> Ali
That's strange, as RangeWrapper works correctly if instantiated
with any underlying range EXCEPT std.container.Array.
Also, RangeWrapper does provide the InputRange interface,
partially directly and partially with alias this. RangeWrapper
should be "opaque", as it should not matter whether the methods
needed for the InputRange interface are defined directly or
inherited with alias this.
More information about the Digitalmars-d-learn
mailing list