std:bind2nd函数为什么不能绑定普通C函数?解决方法

std::bind2nd函数为什么不能绑定普通C函数?
发现bind2nd似乎只能绑定std的functor,而不能绑定普通的C函数,下面这段代码编译的时候会出一堆错误。VC10
为什么呢?
C/C++ code

#include<cstdlib>
#include<vector>
#include<functional>
#include<algorithm>
#include<iostream>
#include<ctime>
using namespace std;
#define N 1000
bool cmp(int& i1,int& i2){return i1>i2;}
void main(){
    srand(time(nullptr));
    int nRand[N];
    for_each(nRand,nRand+N,[=](int& i){i=rand();});
    vector<string> v(N);
    copy(nRand,nRand+N,v.begin());
    auto c=count_if(v.begin(),v.end(),bind2nd(cmp,2));
    //auto c=count_if(v.begin(),v.end(),bind2nd(greater<int>(),2));这样就没有错误
}



1>ClCompile:
1> console1.cpp
1>console1.cpp(12): warning C4244: 'argument' : conversion from 'time_t' to 'unsigned int', possible loss of data
1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xfunctional(320): error C2825: '_Fn2': must be a class or namespace when followed by '::'
1> console1.cpp(17) : see reference to class template instantiation 'std::binder2nd<_Fn2>' being compiled
1> with
1> [
1> _Fn2=bool (int &,int &)
1> ]
1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xfunctional(320): error C2039: 'first_argument_type' : is not a member of '`global namespace''
1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xfunctional(320): error C2146: syntax error : missing ',' before identifier 'first_argument_type'
1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xfunctional(320): error C2065: 'first_argument_type' : undeclared identifier
1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xfunctional(321): error C2825: '_Fn2': must be a class or namespace when followed by '::'
1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xfunctional(321): error C2039: 'result_type' : is not a member of '`global namespace''
1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xfunctional(321): error C2146: syntax error : missing ',' before identifier 'result_type'
1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xfunctional(321): error C2065: 'result_type' : undeclared identifier
1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xfunctional(322): error C2955: 'std::unary_function' : use of class template requires template argument list
1> C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xstddef(135) : see declaration of 'std::unary_function'
1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xfunctional(324): error C2825: '_Fn2': must be a class or namespace when followed by '::'
1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xfunctional(324): error C2039: 'first_argument_type' : is not a member of '`global namespace''
1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xfunctional(324): error C2146: syntax error : missing ',' before identifier 'first_argument_type'
1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xfunctional(324): error C2065: 'first_argument_type' : undeclared identifier
1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xfunctional(325): error C2825: '_Fn2': must be a class or namespace when followed by '::'
1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xfunctional(325): error C2039: 'result_type' : is not a member of '`global namespace''
1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xfunctional(325): error C2146: syntax error : missing ',' before identifier 'result_type'
1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xfunctional(326): error C2955: 'std::unary_function' : use of class template requires template argument list
1> C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xstddef(135) : see declaration of 'std::unary_function'