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.