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.

Reply via email to