+ template <typename Compare>
+ struct make_equal_to_from_compare
+ {
+ typedef Compare compare_functor;
+
+ template <typename T, typename Q>
+ bool operator()( T const& t, Q const& q ) const
+ {
+ compare_functor cmp;
+ return cmp(t, q) == 0;
+ }
+ };
+
+ template <typename Less>
+ struct make_equal_to_from_less
+ {
+ typedef Less less_functor;
+
+ template <typename T, typename Q>
+ bool operator()( T const& t, Q const& q ) const
+ {
+ less_functor less;
+ return !less(t, q) && !less(q, t);
+ }
+ };
+