If a range adaptor object
adaptor accepts more than one argument,
then let
range be an expression
such that
decltype((range)) models
viewable_range,
let
args... be arguments
such that
adaptor(range, args...) is a well-formed expression
as specified in the rest of subclause
[range.adaptors], and
let
BoundArgs be a pack
that denotes
decay_t<decltype((args))>.... The expression
adaptor(args...) produces a range adaptor closure object
f
that is a perfect forwarding call wrapper (
[func.require]) with the following properties:
Its target object is a copy of
adaptor.Its bound argument entities
bound_args consist of objects of types
BoundArgs... direct-non-list-initialized with
std::forward<decltype((args))>(args)..., respectively
.Its call pattern is
adaptor(r, bound_args...),
where
r is the argument used in a function call expression of
f.
The expression
adaptor(args...) is well-formed if and only if
the initialization of the bound argument entities of the result,
as specified above, are all well-formed
.