cpp/named req/RangeAdaptorObject

Range adaptor objects are customization point objects that accept as their first arguments and return a. Some range adaptor objects are unary, i.e. they take one as their only argument. Other range adaptor objects take a and other trailing arguments.

If a range adaptor object takes only one argument, it is also a.

If a range adaptor object takes more than one argument, it also supports partial application: let expression has following properties:
 * be such a range adaptor object, and
 * be arguments (generally suitable for trailing arguments),
 * it is valid if and only if for every argument in  such that  is,  is ,
 * when the call is valid, its result object stores a subobject of type direct-non-list-initialized with, for every argument  in  (in other words, range adaptor objects bind arguments by value),
 * the result object is a ,
 * calling the forwards the bound arguments (if any) to the associated range adaptor object. The bound arguments (if any) are considered to have the value category and cv-qualification of the.

Like other customization point objects, let calls to are all equivalent.
 * be an object of the cv-unqualified version of the type of any range adaptor objects,
 * be any group of arguments that satisfies the constraints of the of the type of ,
 * , and
 * , and
 * , and

The result object of each of these expressions is either a object or a.