Specialisations of this struct should be stateless trivially default constructible with two call operator of signatures:
Element operator()(size_t n) const (possibly noexcept, inline and/or constexpr also) returning a multiplicative identity element for the category 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 operator()(T const&) const (possibly noexcept, inline and/or constexpr also). This could be implemented as: | Element | the type of the elements of a semigroup. |
The second template parameter exists for SFINAE.