cpp/ranges/chunk view

takes a and a number  and produces a range of views (the chunks) of the original view, such that each chunk, except maybe the last one, has the size. These chunks are non-overlapping, successive sub-ranges of the elements of the original view, in order.

Let be the size of the original view. If is not the multiple of, the size of the last produced view is exactly  (the remainder). Otherwise, the size of each chunk, including the last one, is.

The size of produced view is.

If the is not greater than  the behavior is undefined.

@1@ An implementation that supports the underlying view that models only.

@2@ A partial specialization that supports the underlying view that models  or stronger. Models if the underlying view  is, , and either  or non.

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

@4@ Computes the smallest integer value that is not less than the quotient of dividing by. Equivalent to:

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

In addition, if models exactly the,   typically holds two more non-static data members:
 * the number of elements left in the current chunk (shown here as  for exposition only),
 * the current cached underlying iterator (shown here as  for exposition only).

Helper templates
This specialization of makes  satisfy  when the underlying view  satisfies both, the  and the.