Evaluate to true if Range is a range type.
Metafunction that returns true iff Range is a view.
That is, view (range, directions...) returns range itself.
The range.
Zero or more directions. If no directions are given, the range’s default direction is used.
Evaluate to true iff the range is known at compile time to be empty. This happens when empty (range, direction) returns a compile-time constant with value true.
If this evaluates to false, it is still possible for the range to be empty at run time.
Evaluate to true iff the range is known at compile time to be not empty. This happens when empty (range, direction) returns a compile-time constant with value false.
If this evaluates to false, it is still possible for the range to be non-empty at run time.
Metafunction that returns true iff drop (range, direction) returns a Range, or if chop (range, direction) is implemented.
This means, for example, that a recursive iteration can be written as a loop. Since applying “drop” with an increment is equivalent to applying “drop” a number of times, a homogeneous range cannot become heterogeneous.
The range to check for homogeneousness. Qualifications are ignored.
(optional) The direction. If left out, the default direction is used.
Meta-range with the types that traversing over Range result in. If the range is homogeneous, this has infinite length. The direction that this range is traversed in should be the direction of interest of the underlying range. The default direction is that of the underlying range.
view_once() is called on the range first. The resulting types will often be reference types. For example, this is the case when Range is a container.