Если вы используете унарные функторы (в смысле STL), вы можете использовать std :: not1:
struct odd : public std::unary_function<int,bool>
{
bool operator()( int data ) const {
return data % 2;
}
};
void f( std::vector<int> const & v )
{
std::vector<int>::const_iterator first_odd
= std::find_if( v.begin(), v.end(), odd() );
std::vector<int>::const_iterator first_even
= std::find_if( v.begin(), v.end(), std::not1( odd() ) );
}
Но это не работает с unspecified_type , который возвращается из boost :: bind. Для этого вы можете использовать, как уже писал Эрик,! оператор над unspecified_type возвращено.