50 template <
typename T,
typename Enable>
51 struct HeterogeneousAccessEqualTo : std::equal_to<T> {};
53 template <
typename T,
typename Enable>
54 struct HeterogeneousAccessHash : std::hash<T> {
62 template <
typename T,
typename Enable =
void>
74 std::declval<hasher<Range<typename T::value_type const*>>>()(
75 std::declval<Range<typename T::value_type const*>>()))>> {
76 using type = std::remove_const_t<typename T::value_type>;
88 template <
typename U1,
typename U2>
101 template <
typename T>
107 template <
typename U>
113 #if defined(_GLIBCXX_STRING) 114 return std::_Hash_impl::hash(piece.
begin(), piece.
size());
115 #elif defined(_LIBCPP_STRING) 116 return std::__do_string_hash(piece.
begin(), piece.
end());
123 template <
typename U>
138 #if defined(_GLIBCXX_STRING) || defined(_LIBCPP_STRING) 139 return std::hash<std::string>{}(str);
148 template <
typename T>
151 std::enable_if_t<detail::TransparentlyConvertibleToRange<T>::value>>
153 typename detail::ValueTypeForTransparentConversionToRange<T>::type> {
156 template <
typename T>
159 std::enable_if_t<detail::TransparentlyConvertibleToRange<T>::value>>
161 typename detail::ValueTypeForTransparentConversionToRange<T>::type> {
std::size_t operator()(U const &stringish) const
bool operator()(U1 const &lhs, U2 const &rhs) const
std::true_type folly_is_avalanching
constexpr size_type size() const
static std::size_t hashImpl(StringPiece piece)
—— Concurrent Priority Queue Implementation ——
bool_constant< true > true_type
FOLLY_PUSH_WARNING RHS rhs
static std::size_t hashImpl(Range< U const * > piece)
type_t< void, Ts... > void_t
std::is_convertible< T, Range< typename ValueTypeForTransparentConversionToRange< T >::type const * >> TransparentlyConvertibleToRange
bool operator()(std::string const &lhs, std::string const &rhs) const
constexpr Iter end() const
constexpr Iter begin() const
std::size_t operator()(std::string const &str) const
std::remove_const_t< typename T::value_type > type