Every call wrapper ([func.def]) is Cpp17MoveConstructible.
A argument forwarding call wrapper is a
call wrapper that can be called with an arbitrary argument list
and delivers the arguments to the wrapped callable object as references.
This forwarding step delivers rvalue arguments as rvalue references
and lvalue arguments as lvalue references.
A simple call wrapper is an argument forwarding call wrapper that is
Cpp17CopyConstructible and Cpp17CopyAssignable and
whose copy constructor, move constructor, copy assignment operator,
and move assignment operator do not throw exceptions.
This forwarding step delivers a state entity of type T
when the call is performed on an lvalue of the call wrapper type and
as cvT&& otherwise,
where cv represents the cv-qualifiers of the call wrapper and
where cv shall be neither volatile nor constvolatile.
A call pattern defines the semantics of invoking
a perfect forwarding call wrapper.
A postfix call performed on a perfect forwarding call wrapper is
expression-equivalent ([defns.expression-equivalent]) to
an expression e determined from its call pattern cp
by replacing all occurrences
of the arguments of the call wrapper and its state entities
with references as described in the corresponding forwarding steps.
This implies that each of the copy/move constructors has
the same exception-specification as
the corresponding implicit definition and is declared as constexpr
if the corresponding implicit definition would be considered to be constexpr.