View source code
Display the source code in std/range/primitives.d from which this page was generated on
github.
Improve this page
Quickly fork, edit online, and submit a pull request for this page.
Requires a signed-in GitHub account. This works well for small changes.
If you'd like to make larger changes you may want to consider using
local clone.
Page wiki
View or edit the community-maintained wiki page associated with this page.
Enum std.range.primitives.member isBidirectionalRange
Returns true
if R
is a bidirectional range. A bidirectional
range is a forward range that also offers the primitives
and
back
. The following code should compile for any bidirectional
range.
popBack
The semantics of a bidirectional range (not checkable during
compilation) are assumed to be the following (r
is an object
of
type R
):
r.back
returns (possibly a reference to) the last element in the range. Callingr.back
is allowed only if callingr.empty
has, or would have, returnedfalse
.
Declaration
enum isBidirectionalRange(R) = isForwardRange!R && is(typeof((inout int = 0) { R r = R.init; r.popBack(); auto t = r.back; auto w = r.front; static assert(is(typeof(t) == typeof(w))); } ));
Example
alias R = int[]; R r = [0,1]; static assert(isForwardRange!R); // is forward range r.popBack(); // can invoke popBack auto t = r.back; // can get the back of the range auto w = r.front; static assert(is(typeof(t) == typeof(w))); // same type for front and back
Authors
Andrei Alexandrescu, David Simcha, and Jonathan M Davis. Credit for some of the ideas in building this module goes to Leonardo Maffi.