cp-documentation

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub zawa-tin/cp-documentation

:heavy_check_mark: Set Operator
(Src/Algebra/Action/SetOperator.hpp)

example

struct OP {
    using Element = long long;
    static Element identity() {
        return 0;
    }
    static void add(Element& s, int v) {
        s += v;
    }
    static void remove(Element& s, int v) {
        s -= v;
    }
};

remove(s, v)の前には(まだremoveされていない)add(s, v)と丁度一つ対応させることができる時に使う。

Required by

Verified with

Code

#pragma once

#include <concepts>

namespace zawa {

namespace concepts {

template <class S, class T>
concept SetOperator = requires {
    typename S::Element;
    { S::identity() } -> std::same_as<typename S::Element>;
    { S::add(std::declval<typename S::Element&>(), std::declval<T>()) } -> std::same_as<void>;
    { S::remove(std::declval<typename S::Element&>(), std::declval<T>()) } -> std::same_as<void>;
};

} // namespace concepts

} // namespace zawa
#line 2 "Src/Algebra/Action/SetOperator.hpp"

#include <concepts>

namespace zawa {

namespace concepts {

template <class S, class T>
concept SetOperator = requires {
    typename S::Element;
    { S::identity() } -> std::same_as<typename S::Element>;
    { S::add(std::declval<typename S::Element&>(), std::declval<T>()) } -> std::same_as<void>;
    { S::remove(std::declval<typename S::Element&>(), std::declval<T>()) } -> std::same_as<void>;
};

} // namespace concepts

} // namespace zawa
Back to top page