std :: bind не работает

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

5
задан Channel72 16 April 2011 в 23:25
поделиться