Specialisations of this struct should be stateless trivially default constructible with:
Element operator()(Element const& x) ! const (possibly noexcept, inline and/or constexpr also) returning the identity element of type Element for x.To use the adapter with SchreierSims it is necessary to implement:
Element operator()(size_t n) const (possibly noexcept, inline and/or constexpr also) returning a multiplicative identity element x of type Element and with Degree<Element>()(x) equal to the parameter n. For example, if Element is a type of n x n matrices, then this should return the n x n identity matrix.| Element | the type of the elements of a semigroup. |
The second template parameter exists for SFINAE.