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.
Template std.range.primitives.isInfinite
Returns true
if R
is an infinite input range. An
infinite input range is an input range that has a statically-defined
enumerated member called
that is always empty
false
,
for example:
struct MyInfiniteRange { enum bool empty = false; ... }
Arguments
template isInfinite(R);
Example
import std.range : Repeat; static assert(!isInfinite!(int[])); static assert( isInfinite!(Repeat!(int))); } /** Returnstrue
ifR
offers a slicing operator with integral boundaries that returns a forward range type. For finite ranges, the result ofopSlice
must be of the same type as the original range type. If the range definesopDollar
, then it must support subtraction. For infinite ranges, when not usingopDollar
, the result ofopSlice
must be the result of take or takeExactly on the original range (they both return the same type for infinite ranges). However, when usingopDollar
, the result ofopSlice
must be that of the original range type. The following code must compile forhasSlicing
to betrue
:
R r = void;
static if(isInfinite
!R)
typeof(take(r, 1)) s = r[1 .. 2];
else
{
static assert(is(typeof(r[1 .. 2]) == R));
R s = r[1 .. 2];
}
s = r[1 .. 2];
static if(is(typeof(r[0 .. $]))) { static assert(is(typeof(r[0 .. $]) == R)); R t = r[0 .. $]; t = r[0 .. $];
static if(!isInfinite
!R)
{
static assert(is(typeof(r[0 .. $ - 1]) == R));
R u = r[0 .. $ - 1];
u = r[0 .. $ - 1];
}
Authors
Andrei Alexandrescu, David Simcha, and Jonathan M Davis. Credit for some of the ideas in building this module goes to Leonardo Maffi.