Некоторый простой код продемонстрирует проблему:
class Foo {};
struct Bar {
bool foo(const Foo &f) const { return false; }
};
int main() {
Bar bar;
vector<Foo> v;
std::find_if(v.begin(), v.end(), std::bind1st(
std::mem_fun_ref(&Bar::foo), bar));
return 0;
}
Теперь для этого кода компилятор VS2010 c ++ будет жаловаться:
ошибка C2535: bool std :: binder1st <_Fn2> :: operator () (const Foo &) const:
функция-член уже определена из объявленного
В более ранних версиях Visual Studio возможны еще две ошибки компиляции, связанные со ссылками на проблемы со ссылками. Хотя эти проблемы исчезли в VS2010, C2535 остается.
Этот вопрос похож на этот . Как предполагается в этом посте, я могу использовать std :: bind или библиотеку boost в качестве альтернативы. Они работают нормально, но сейчас я хотел бы знать, возможно ли использовать старый стиль bind1st в этом случае, или эта проблема является скорее дефектом, присущим функциональной структуре STL?
Спасибо!