The following member names are defined in addition to names specified in Clause
[function.objects]:
namespace std {
template<class T> struct owner_less<shared_ptr<T>> {
using result_type = bool;
using first_argument_type = shared_ptr<T>;
using second_argument_type = shared_ptr<T>;
};
template<class T> struct owner_less<weak_ptr<T>> {
using result_type = bool;
using first_argument_type = weak_ptr<T>;
using second_argument_type = weak_ptr<T>;
};
template <class T> class reference_wrapper {
public :
using result_type = see below; using argument_type = see below; using first_argument_type = see below; using second_argument_type = see below; };
template <class T> struct plus {
using first_argument_type = T;
using second_argument_type = T;
using result_type = T;
};
template <class T> struct minus {
using first_argument_type = T;
using second_argument_type = T;
using result_type = T;
};
template <class T> struct multiplies {
using first_argument_type = T;
using second_argument_type = T;
using result_type = T;
};
template <class T> struct divides {
using first_argument_type = T;
using second_argument_type = T;
using result_type = T;
};
template <class T> struct modulus {
using first_argument_type = T;
using second_argument_type = T;
using result_type = T;
};
template <class T> struct negate {
using argument_type = T;
using result_type = T;
};
template <class T> struct equal_to {
using first_argument_type = T;
using second_argument_type = T;
using result_type = bool;
};
template <class T> struct not_equal_to {
using first_argument_type = T;
using second_argument_type = T;
using result_type = bool;
};
template <class T> struct greater {
using first_argument_type = T;
using second_argument_type = T;
using result_type = bool;
};
template <class T> struct less {
using first_argument_type = T;
using second_argument_type = T;
using result_type = bool;
};
template <class T> struct greater_equal {
using first_argument_type = T;
using second_argument_type = T;
using result_type = bool;
};
template <class T> struct less_equal {
using first_argument_type = T;
using second_argument_type = T;
using result_type = bool;
};
template <class T> struct logical_and {
using first_argument_type = T;
using second_argument_type = T;
using result_type = bool;
};
template <class T> struct logical_or {
using first_argument_type = T;
using second_argument_type = T;
using result_type = bool;
};
template <class T> struct logical_not {
using argument_type = T;
using result_type = bool;
};
template <class T> struct bit_and {
using first_argument_type = T;
using second_argument_type = T;
using result_type = T;
};
template <class T> struct bit_or {
using first_argument_type = T;
using second_argument_type = T;
using result_type = T;
};
template <class T> struct bit_xor {
using first_argument_type = T;
using second_argument_type = T;
using result_type = T;
};
template <class T> struct bit_not {
using argument_type = T;
using result_type = T;
};
template<class R, class T1>
class function<R(T1)> {
public:
using argument_type = T1;
};
template<class R, class T1, class T2>
class function<R(T1, T2)> {
public:
using first_argument_type = T1;
using second_argument_type = T2;
};
}
The simple call wrapper
returned from a call to
mem_fn(pm)
shall define two nested types
named
argument_type and
result_type
as synonyms for
cv T* and
Ret, respectively,
when
pm is a pointer to member function
with cv-qualifier
cv
and taking no arguments,
where
Ret is
pm's return type
. The following member names are defined in addition to names specified in Clause
[containers]:
namespace std {
template <class Key, class T, class Compare, class Allocator>
class map<Key, T, Compare, Allocator>::value_compare {
public:
using result_type = bool;
using first_argument_type = value_type;
using second_argument_type = value_type;
};
template <class Key, class T, class Compare, class Allocator>
class multimap<Key, T, Compare, Allocator>::value_compare {
public:
using result_type = bool;
using first_argument_type = value_type;
using second_argument_type = value_type;
};
}