Второй аргумент является числом и не может быть преобразован в const int &
.
Вы можете использовать boost::bind
, чтобы выполнить трюк:
std::count_if (vec.begin(), vec.end(), boost::bind (foo, _1, 17));
РЕДАКТИРОВАТЬ :
Начиная с моего первого ответа, да, вы не можете использовать переменную вместо числа.Я думаю, что проблема в том, что bind2nd
и ptr_fun
неправильно определены для разыменования типа в том случае, если он является ссылкой, когда ptr_fun
строит внутренний объект Operation
, поэтому она идет с надстройкойили напишите свой собственный класс функторов.