isBidirectionalRange fails for unknown reasons
Jack Stouffer via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Dec 16 12:43:02 PST 2015
I'm trying to add a ReferenceBidirectionalRange range type to
std.internal.test.dummyrange so I can test some range code I'm
writing, but I've hit a wall and I'm not sure why. For some
reason, the isBidirectionalRange check fails even though back and
popBack are present. Any help here would be appreciated.
the code:
============================
import std.range;
class ReferenceInputRange(T)
{
import std.array : array;
this(Range)(Range r) if (isInputRange!Range) { _payload =
array(r); }
final @property ref T front(){ return _payload.front; }
final void popFront(){ _payload.popFront(); }
final @property bool empty(){ return _payload.empty; }
protected T[] _payload;
}
class ReferenceForwardRange(T) : ReferenceInputRange!T
{
this(Range)(Range r) if (isInputRange!Range) { super(r); }
final @property ReferenceForwardRange save()
{return new ReferenceForwardRange!T( _payload); }
}
class ReferenceBidirectionalRange(T) : ReferenceForwardRange!T
{
this(Range)(Range r) if (isInputRange!Range) { super(r); }
final @property ref T back(){ return _payload.back; }
final void popBack(){ _payload.popBack(); }
}
unittest
{
static assert(isInputRange!(ReferenceInputRange!int)); //
works
static assert(isForwardRange!(ReferenceForwardRange!int)); //
works
static
assert(isBidirectionalRange!(ReferenceBidirectionalRange!int));
//fails
}
More information about the Digitalmars-d-learn
mailing list