Я не могу заставить 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);
}
Я использую привязку для вызова 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
как-то отличается, или это проблема компилятора?