// -------------------------------------------------------------------------- // identity // -------------------------------------------------------------------------- template struct identity : std::unary_function { Arg operator()(typename call_traits::param_type x) { return x; } }; // -------------------------------------------------------------------------- // project1st, project2nd // -------------------------------------------------------------------------- template struct project1st : std::binary_function { Arg1 operator()(typename call_traits::param_type x, typename call_traits::param_type y) { return x; } }; template struct project2nd : std::binary_function { Arg2 operator()(typename call_traits::param_type x, typename call_traits::param_type y) { return y; } }; // -------------------------------------------------------------------------- // select1st, select2nd // -------------------------------------------------------------------------- template struct select1st : std::unary_function { typename Pair::first_type operator()(typename call_traits::param_type x) { return x.first; } }; template struct select2nd : std::unary_function { typename Pair::second_type operator()(typename call_traits::param_type x) { return x.second; } };