cpp/ranges/stride view

@1@ is a range adaptor that takes a  and a number  and produces a view, that consists of elements of the original view by advancing over n elements at a time. This means that each $th$ element of the produced view is $th$ element of the original view, for some non-negative index. The elements of the original view, whose "index" is not a multiple of, are not present in the produced view.

@@ Let be the size of the original view. Then the size of produced view is:
 * , if ; otherwise,
 * , if ; otherwise,
 * , and the resulting view is empty.

@2@ The name denotes a. Given subexpressions and, the expression  is expression-equivalent to.

@@ The must be greater than, otherwise the behavior is undefined.

always models, and models , , , and/or , if adapted type  models the corresponding concept. models whenever the underlying view  does.

Data members
Typical implementations of hold only two non-static data members:
 * the underlying of type  (shown here as  for exposition only),
 * the size object (the "stride") of type (shown here as  for exposition only).

Helper templates
This specialization of makes  satisfy  when the underlying view satisfies it.