This documentation is automatically generated by online-judge-tools/verification-helper
#include "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)と丁度一つ対応させることができる時に使う。
#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