Этот код соответствует.Аргументы, которые вы передаете результату связывания, используются только при необходимости.
Использование терминологии из стандарта: u
- это результат std::bind(f, t1, ..., tN)
.
Приблизительно говоря:
Когда вызывается u(u1, u2, ..., uM)
, f
вызывается как f(v1, ..., vN)
, где значения vi
определяются следующим алгоритмом:
//N is the N from `std::bind(f, t1, ..., tN)`
For each i in 1 to N:
if (ti is a reference wrapper) vi is the unwrapped version of t1
if (ti is a bind_expression) vi is the result of calling ti with u1, ..., uM
if (ti is a placeholder) vi is uj (where j is is_placeholder<decltype(ti)>::value)
otherwise vi is ti