The implementation
provides a definition that has a base characteristic of
true_type if T is a type returned from bind,
otherwise it has a base characteristic of false_type.
A program may specialize this template for a program-defined type T
to have a base characteristic of true_type to indicate that
T should be treated as a subexpression in a bind call.
The implementation
provides a definition that has the base characteristic of
integral_constant<int, J> if T is the type of
std::placeholders::_J, otherwise it has a
base characteristic of integral_constant<int, 0>.
A program
may specialize this template for a program-defined type T to
have a base characteristic of integral_constant<int, N>
with N >0 to indicate that T should be
treated as a placeholder type.
Returns: An argument forwarding call wrapper g ([func.require]).
A program that attempts to invoke a volatile-qualified g
is ill-formed.
When g is not volatile-qualified, invocation of
g(u1, u2, …, uM)
is expression-equivalent ([defns.expression.equivalent]) to
INVOKE(static_cast<Vfd>(vfd),
static_cast<V1>(v1), static_cast<V2>(v2), …, static_cast<VN>(vN)
for the first overload, and
INVOKE<R>(static_cast<Vfd>(vfd),
static_cast<V1>(v1), static_cast<V2>(v2), …, static_cast<VN>(vN)
for the second overload,
where the values and types of the target argument vfd and
of the bound arguments
v1, v2, …, vN are determined as specified below.
The values of the bound argumentsv1, v2, …, vN and their
corresponding types V1, V2, …, VN depend on the
types TDi derived from
the call to bind and the
cv-qualifiers cv of the call wrapper g as follows:
if the value of is_bind_expression_v<TDi>
is true, the argument is
static_cast<cvTDi&>(tdi)(std::forward<Uj>(uj).)
and its type Vi is
invoke_result_t<cvTDi&, Uj.>&;
All placeholder types meet the Cpp17DefaultConstructible and
Cpp17CopyConstructible requirements, and
their default constructors and copy/move
constructors are constexpr functions that
do not throw exceptions.
It is implementation-defined whether
placeholder types meet the Cpp17CopyAssignable requirements,
but if so, their copy assignment operators are
constexpr functions that do not throw exceptions.