70 typedef Modulo<N, T> TSelf;
72 typedef typename util::CallTraits<T>::TValue TValue;
73 typedef typename util::CallTraits<T>::TParam TParam;
78 typedef Modulo<N, U> Type;
82 constexpr Modulo(TParam value);
84 constexpr Modulo<N, T> operator+()
const;
85 constexpr Modulo<N, T> operator-()
const;
87 constexpr Modulo<N, T>& operator++();
88 constexpr Modulo<N, T>& operator--();
89 constexpr Modulo<N, T> operator++(
int);
90 constexpr Modulo<N, T> operator--(
int);
92 constexpr Modulo<N, T>& operator+=(
const Modulo<N, T>& b);
93 constexpr Modulo<N, T>& operator-=(
const Modulo<N, T>& b);
94 constexpr Modulo<N, T>& operator*=(
const Modulo<N, T>& b);
97 constexpr operator T()
const {
return value_; }
98 constexpr TParam value()
const {
return value_; }
102 static_assert(
static_cast<T
>(N) > 0 &&
static_cast<T
>(N) < NumTraits<T>::max);
104 constexpr Modulo(TParam value,
bool);
106 constexpr bool isInRange(TParam value)
const;