noya2_Library

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

View the Project on GitHub noya2ruler/noya2_Library

:heavy_check_mark: misc/concepts.hpp

Required by

Verified with

Code

#pragma once

#include<concepts>

namespace noya2 {

template<class monoid>
concept Monoid = requires {
    typename monoid::value_type;
    {monoid::op(declval<typename monoid::value_type>(),declval<typename monoid::value_type>())} -> std::same_as<typename monoid::value_type>;
    {monoid::e()} -> std::same_as<typename monoid::value_type>;
};

template<class group>
concept Group = requires {
    requires Monoid<group>;
    {group::inv(declval<typename group::value_type>())} -> std::same_as<typename group::value_type>;
};

} // namespace noya2
#line 2 "misc/concepts.hpp"

#include<concepts>

namespace noya2 {

template<class monoid>
concept Monoid = requires {
    typename monoid::value_type;
    {monoid::op(declval<typename monoid::value_type>(),declval<typename monoid::value_type>())} -> std::same_as<typename monoid::value_type>;
    {monoid::e()} -> std::same_as<typename monoid::value_type>;
};

template<class group>
concept Group = requires {
    requires Monoid<group>;
    {group::inv(declval<typename group::value_type>())} -> std::same_as<typename group::value_type>;
};

} // namespace noya2
Back to top page