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.