30 #include <boost/functional/hash.hpp>
34 template <
class T1,
class T2>
35 struct hash<
std::pair<T1, T2>>
44 boost::hash_combine(seed, std::hash<T1>{}(
s.first));
45 boost::hash_combine(seed, std::hash<T2>{}(
s.second));
51 template <
class... Ts>
52 struct hash<
std::tuple<Ts...>>
59 template <std::
size_t N>
60 using type =
typename std::tuple_element<N, argument_type>::type;
62 template <
class = std::make_index_sequence<
sizeof...(Ts)>>
65 template <std::size_t... Is>
66 struct helper<
std::index_sequence<Is...>>
72 (boost::hash_combine(seed, std::hash<type<Is>>{}(std::get<Is>(
s))), ...);
81 return helper<>::hash(
s);