View source code
Display the source code in std/range/primitives.d from which this
page was generated on github.
Report a bug
If you spot a problem with this page, click here to create a
Bugzilla issue.
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.
Enum member std.range.primitives.isBidirectionalRange
Returns true
if R
is a bidirectional range. A bidirectional
range is a forward range that also offers the primitives back
and
popBack
. The following code should compile for any bidirectional
range.
enum isBidirectionalRange(R)
= isForwardRange!R && is(typeof((R r) => r .popBack)) && is(typeof((R r)
{
return r .back;
}
(R .init)) == ElementType!R);
The semantics of a bidirectional range (not checkable during
compilation) are assumed to be the following (r
is an object of
type R
):
r
returns (possibly a reference to) the last element in the range. Calling.back r
is allowed only if calling.back r
has, or would have, returned.empty false
.
See Also
The header of std
for tutorials on ranges.
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.
License
Copyright © 1999-2024 by the D Language Foundation | Page generated by ddox.