On Wednesday, 16 December 2015 at 20:43:02 UTC, Jack Stouffer wrote:
...

You can also use return type covariance:

class ReferenceBidirectionalRange(T) : ReferenceForwardRange!T
{
    this(Range)(Range r) if (isInputRange!Range) { super(r); }
final override @property typeof(this) save() { return new typeof(this)(_payload); }
    final @property ref T back(){ return _payload.back; }
    final void popBack(){ _payload.popBack(); }
}

ReferenceBidirectionalRange!T is a subtype of ReferenceForwardRange!T, so the override is legal.

Reply via email to