Lines Matching full:hash

22 template <class Hash, class Key, class Res = decltype(std::declval<Hash&>()(std::declval<Key>()))>
30 template <class Hash, class Key>
32 return can_hash_impl<Hash, Key>(0);
49 // Test that the specified Hash meets the requirements of an enabled hash
50 template <class Key, class Hash = std::hash<Key>>
52 static_assert(std::is_destructible<Hash>::value, "");
54 // Enabled hash requirements
55 static_assert(std::is_default_constructible<Hash>::value, "");
56 static_assert(std::is_copy_constructible<Hash>::value, "");
57 static_assert(std::is_move_constructible<Hash>::value, "");
58 static_assert(std::is_copy_assignable<Hash>::value, "");
59 static_assert(std::is_move_assignable<Hash>::value, "");
62 static_assert(std::is_swappable<Hash>::value, "");
64 static_assert(std::__is_swappable_v<Hash>, "");
68 static_assert(can_hash<Hash, Key&>(), "");
69 static_assert(can_hash<Hash, Key const&>(), "");
70 static_assert(can_hash<Hash, Key&&>(), "");
71 static_assert(can_hash<Hash const, Key&>(), "");
72 static_assert(can_hash<Hash const, Key const&>(), "");
73 static_assert(can_hash<Hash const, Key&&>(), "");
75 static_assert(can_hash<Hash, ConvertibleToSimple<Key>&>(), "");
76 static_assert(can_hash<Hash, ConvertibleToSimple<Key> const&>(), "");
77 static_assert(can_hash<Hash, ConvertibleToSimple<Key>&&>(), "");
79 static_assert(can_hash<Hash, ConvertibleTo<Key>&>(), "");
80 static_assert(can_hash<Hash, ConvertibleTo<Key> const&>(), "");
81 static_assert(can_hash<Hash, ConvertibleTo<Key>&&>(), "");
82 static_assert(can_hash<Hash, ConvertibleTo<Key> const&&>(), "");
84 const Hash h{};
88 // Test that the specified Hash meets the requirements of a disabled hash.
89 template <class Key, class Hash = std::hash<Key>>
91 // Disabled hash requirements
92 static_assert(!std::is_default_constructible<Hash>::value, "");
93 static_assert(!std::is_copy_constructible<Hash>::value, "");
94 static_assert(!std::is_move_constructible<Hash>::value, "");
95 static_assert(!std::is_copy_assignable<Hash>::value, "");
96 static_assert(!std::is_move_assignable<Hash>::value, "");
99 !std::is_function<typename std::remove_pointer<typename std::remove_reference<Hash>::type>::type>::value, "");
102 static_assert(!can_hash<Hash, Key&>(), "");
103 static_assert(!can_hash<Hash, Key const&>(), "");
104 static_assert(!can_hash<Hash, Key&&>(), "");
105 static_assert(!can_hash<Hash const, Key&>(), "");
106 static_assert(!can_hash<Hash const, Key const&>(), "");
107 static_assert(!can_hash<Hash const, Key&&>(), "");
109 static_assert(!can_hash<Hash, ConvertibleToSimple<Key>&>(), "");
110 static_assert(!can_hash<Hash, ConvertibleToSimple<Key> const&>(), "");
111 static_assert(!can_hash<Hash, ConvertibleToSimple<Key>&&>(), "");
113 static_assert(!can_hash<Hash, ConvertibleTo<Key>&>(), "");
114 static_assert(!can_hash<Hash, ConvertibleTo<Key> const&>(), "");
115 static_assert(!can_hash<Hash, ConvertibleTo<Key>&&>(), "");
116 static_assert(!can_hash<Hash, ConvertibleTo<Key> const&&>(), "");
123 // Each header that declares the std::hash template provides enabled
124 // specializations of std::hash for std::nullptr_t and all cv-unqualified
141 // Test that each of the library hash specializations for arithmetic types,