10 template<
typename _Tp,
typename Enabled=
void>
15 template<
class Type,
class Enabled >
23 return std::hash< Type >()( value );
28 template<
class Enum >
29 struct hash< Enum, typename std::enable_if< std::is_enum< Enum >::value >::type >
33 using Underlying =
typename std::underlying_type< Enum >::type;
34 return std::hash< Underlying >()(
static_cast< Underlying
>( value ) );
44 seed ^=
iv::hash<T>()(v) + 0x9e3779b9 + (seed<<6) + (seed>>2);
47 template <class Tuple, size_t Index = ::std::tuple_size<Tuple>::value - 1>
50 static void apply(
size_t& seed, Tuple
const& tuple)
57 template <
class Tuple>
60 static void apply(
size_t& seed, Tuple
const& tuple)
67 template<
typename... TupleTypes >
68 struct hash< std::tuple< TupleTypes... > >
70 size_t operator()( std::tuple< TupleTypes... >
const & value )
const
78 template<
typename First,
typename Second >
79 struct hash< std::pair< First, Second > >
81 size_t operator()( std::pair< First, Second >
const & value )
const
83 return ::iv::hash< std::tuple< First, Second > >()( std::make_tuple( value.first, value.second ) );