Я не могу заставить std::bind
работать так же, как boost::bind
работает. Либо я не правильно его использую, либо мой компилятор (GCC 4.4.5) еще не реализовал его правильно.
У меня есть две функции:
void f(int x, int y)
{
cout << x << " | " << y << endl;
}
template <class UnaryFunction>
void g(UnaryFunction func)
{
func(100);
}
Я использую bind для вызова f
как унарную функцию в g:
g(std::bind(f, 10, std::placeholders::_1));
Это приводит к ошибке компилятора:
error: no match for call to ‘(std::_Bind<void (*(int, std::_Placeholder<1>))(int, int)>) (int)’
... сопровождаемая страницей или около того рвотного компилятора шаблона.
Если я использую boost::bind
, например:
g(boost::bind(f, 10, _1));
... работает нормально. Семантика std::bind
как-то отличается, или это проблема компилятора?