binary_function
template<class Arg1, class Arg2, class Result>
    struct binary_function {
    typedef Arg1 first_argument_type;
    typedef Arg2 second_argument_type;
    typedef Result result_type;
    };
The template class serves as a base for classes that define a member function of the form:
result_type operator()(first_argument_type, second_argument_type)
Hence, all such binary functions can refer to their first argument type as first_argument_type, their second argument type as second_argument_type, and their return type as result_type.
See the related sample program.