37namespace contains_internal_impl {
43template <
typename Container,
typename Key>
45 decltype(void(std::declval<Container&>().find(std::declval<Key&>())));
69template <
typename Container,
typename T,
typename =
void>
72template <
typename Container,
typename T>
78 typename std::remove_cv_t<typename std::remove_reference_t<T>>;
80template <
typename T,
typename U>
92template <
typename Container,
typename U,
93 typename = std::enable_if_t<
98constexpr bool Contains(Container&& container, U&& u) {
100 return container.find(std::forward<U>(u)) != container.end();
104 typename Container,
typename U,
105 std::enable_if_t<!contains_internal_impl::HasFindImpl<Container, U>::value,
107constexpr bool Contains(Container&& container, U&& u) {
110 std::find(std::begin(container), std::end(container), std::forward<U>(u));
111 return itr != std::end(container);
116constexpr bool Contains(
const std::string& s, T&& t) {
117 return s.find(std::forward<T>(t)) != std::string::npos;
121constexpr bool Contains(
const std::string_view& s, T&& t) {
122 return s.find(std::forward<T>(t)) != std::string_view::npos;
typename std::remove_cv_t< typename std::remove_reference_t< T > > RemoveCvref
Definition: contains.h:78
decltype(void(std::declval< Container & >().find(std::declval< Key & >()))) VoidTypeIfHasFind
Definition: contains.h:45
typename std::is_same< RemoveCvref< T >, RemoveCvref< U > > IsSame
Definition: contains.h:81
Definition: alloc_utils.cpp:23
constexpr bool Contains(Container &&container, U &&u)
Definition: contains.h:98
Definition: contains.h:70
Definition: contains.h:87
Definition: contains.h:84