15concept SetImpl =
requires {
16 requires std::forward_iterator<typename T::iterator>;
17 requires std::forward_iterator<typename T::const_iterator>;
18 requires std::same_as<typename std::iterator_traits<typename T::iterator>::value_type,
typename T::value_type>;
19 requires std::same_as<typename std::iterator_traits<typename T::const_iterator>::value_type,
typename T::value_type>;
20 { std::declval<T &>().begin() } -> std::same_as<typename T::iterator>;
21 { std::declval<T &>().end() } -> std::same_as<typename T::iterator>;
22 { std::declval<const T &>().begin() } -> std::same_as<typename T::const_iterator>;
23 { std::declval<const T &>().end() } -> std::same_as<typename T::const_iterator>;
24 { std::declval<T &>().contains(std::declval<const typename T::value_type &>()) } -> std::convertible_to<bool>;
25 { std::declval<const T &>().contains(std::declval<const typename T::value_type &>()) } -> std::convertible_to<bool>;
26 std::declval<T &>().insert(std::declval<const typename T::value_type &>());
27 std::declval<T &>().erase(std::declval<const typename T::value_type &>());
28 { std::declval<T &>().erase(std::declval<const typename T::iterator &>()) } -> std::same_as<typename T::iterator>;
29 { std::declval<T &>().erase(std::declval<const typename T::const_iterator &>()) } -> std::same_as<typename T::iterator>;
33concept Set = SetImpl<std::remove_cv_t<std::remove_reference_t<T>>>;
39template <
typename S,
typename T>
40 requires detail::Set<S> && detail::Set<T>
42 for (
const auto &value : rhs) {
48template <
typename S,
typename T>
49 requires detail::Set<S> && detail::Set<T> && std::is_rvalue_reference_v<T &&>
51 for (
auto &value : rhs) {
52 lhs.insert(std::move(value));
57template <
typename S,
typename T>
58 requires detail::Set<S> && detail::Set<T>
60 for (
auto i = lhs.begin(); i != lhs.end();) {
61 if (!rhs.contains(*i)) {
70template <
typename S,
typename T>
71 requires detail::Set<S> && detail::Set<T>
73 for (
const auto &element : rhs) {
79template <
typename S,
typename T>
80 requires detail::Set<S> && detail::Set<T>
85template <
typename S,
typename T>
86 requires detail::Set<S> && detail::Set<T> && std::is_rvalue_reference_v<T &&>
88 return lhs |= std::move(rhs);
91template <
typename S,
typename T>
92 requires detail::Set<S> && detail::Set<T>
97template <
typename S,
typename T>
98 requires detail::Set<S> && detail::Set<T>
S operator-(S lhs, const T &rhs)
Definition SetOps.h:99
S & operator|=(S &lhs, const T &rhs)
Definition SetOps.h:41
S operator&(S lhs, const T &rhs)
Definition SetOps.h:93
S & operator&=(S &lhs, const T &rhs)
Definition SetOps.h:59
S & operator-=(S &lhs, const T &rhs)
Definition SetOps.h:72
S operator|(S lhs, const T &rhs)
Definition SetOps.h:81
Definition GraphColoringAllocator.h:13