29template <
class HASHER,
class T>
31 std::destructible<HASHER> &&
32 std::copy_constructible<HASHER> &&
33 requires (
const HASHER&
h, T
x)
35 {
h(
x) } -> std::same_as<std::size_t>;
40template <
class PRED,
class ARG1,
class ARG2=ARG1>
42 std::copy_constructible<PRED> &&
43 std::predicate<PRED, ARG1, ARG2>;
46template <
class CONTAINER>
48 requires (CONTAINER& c)
50 requires std::contiguous_iterator<
decltype(c.begin())>;
54template <
class ITERATOR,
class VAL>
56 std::input_iterator<ITERATOR> &&
57 std::convertible_to<std::iter_value_t<ITERATOR>, VAL>;
59template <
typename SET>
61 typename SET::value_type;
62 typename SET::key_type;
63 typename SET::iterator;
64 typename SET::const_iterator;
65 typename SET::reference;
66 typename SET::const_reference;
67 typename SET::const_pointer;
69 { s.find(k) } -> std::convertible_to<typename SET::const_iterator>;
70 { s.insert(k) } -> std::convertible_to<std::pair<typename SET::iterator, bool>>;
73template <
typename MAP>
75 typename MAP::value_type;
76 typename MAP::key_type;
77 typename MAP::mapped_type;
79 { m[k] } -> std::convertible_to<typename MAP::mapped_type>;
80 { m.find(k) } -> std::convertible_to<typename MAP::iterator>;
81 { m.insert(std::make_pair(k, v)) } -> std::same_as<std::pair<typename MAP::iterator, bool>>;
86template <
typename F,
typename T>
88 std::invocable<F> && std::convertible_to<std::invoke_result_t<F>, T*>;