Возможно, типовое отверстие безопасности в привязке -> преобразование функции.
boost :: bind не возвращает std :: function , но является функциональным объектом очень сложного типа. В случае
boost::bind(&A::boo,a,_1);
как видно выше, возвращаемый объект имеет тип
boost::_bi::bind_t<
int,
boost::_mfi::mf1<int,A,int>,
boost::_bi::list2<boost::_bi::value<A*>, boost::arg<1> >
>
std :: function только проверяет, является ли предоставленный объект функции «совместимым», в этом случае, может ли он быть вызван с int в качестве первого аргумента и указатель на символ в качестве второго аргумента. Изучив шаблон * boost :: bind_t *, мы увидим, что он действительно имеет соответствующий оператор вызова функции:
template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2)
Внутри этой функции второй аргумент завершается молча отбрасыванием. Это по замыслу. Из документации: Любые дополнительные аргументы игнорируются (...)