Функция ptr_fun создает функторы pointer_to_unary_function и pointer_to_binary_function, в которых типы аргументов совпадают с типами аргументов адаптируемой фукции. Т.е. сигнатуры вызовов operator() выглядят так
Result operator()(const Arg _Left) const;
Result operator()(const Arg1 _Left, const Arg2 _Right) const;
, т.е. без референсов.
В то же время, классы binder1st и binder2nd определяют operator() так
result_type operator()(const argument_type& _Right) const
result_type operator()(argument_type& _Right) const
, т.е. вешают референсы.
Из-за этого невозможно явно использовать функции с аргументами-ссылками.
void SomeFunc(int&, int) {}
bind2nd(ptr_fun(SomeFunc), 0); /*сплошной мат-перемат*/
VC 7.1
Кто что скажет?