Understanding isInfinite(Range)
Steven Schveighoffer
schveiguy at yahoo.com
Fri Sep 3 08:17:17 PDT 2010
On Fri, 03 Sep 2010 11:12:29 -0400, Andrej Mitrovic
<andrej.mitrovich at test.com> wrote:
> I was reading about the various range templates in std.range and I found
> this:
>
> http://www.digitalmars.com/d/2.0/phobos/std_range.html#isInfinite
>
> Seems simple enough. But I dont understand it's implementation, this
> from range.d:
>
> template isInfinite(Range)
> {
> static if (isInputRange!Range && is(char[1 + Range.empty]))
> enum bool isInfinite = !Range.empty;
> else
> enum bool isInfinite = false;
> }
>
> What does char[1 + Range.empty] do? It looks rather cryptic..
char[1+Range.empty] is a type. If Range.empty is a compile-time constant,
then this type is valid, otherwise it's not valid (the is expression
results to true if the argument is a valid type).
If it's valid, then Range.empty never changes. If it never changes and
it's always false, then it's infinite.
-Steve
More information about the Digitalmars-d-learn
mailing list