std::not1などをboost::bindと組み合わせる場合には、bindで作られた関数オブジェクトの返り値の型を明示するためにmake_adaptableが必要です。
つまり、
std::find_if(v.begin(), v.end(), std::not1(boost::bind(std::equal_to<int>(), _1, 5)));
だとコンパイルエラーになるので、
std::find_if(v.begin(), v.end(), std::not1(boost::make_adaptable<bool, int>( boost::bind(std::equal_to<int>(), _1, 5))));
にしなくてはいけないということです*1。しかし、よく考えるとbindする前の関数を反転した方が手っ取り早いですね。
std::find_if(v.begin(), v.end(), boost::bind(std::not2(std::equal_to<int>()), _1, 5));
*1 そもそも上の例だと単にstd::findを使えばいいのですが