modulusValue - HaxyM/crap GitHub Wiki

crap :: modulusValue

Defined in "crap/functional.d/modulusvalue.h".
Defined in "crap/functional".


template <class Type, Type ... Values> struct modulusValue;

Returns result of modulo division of Values... in order of their appearance. If Values... is empty, this operator is not defined.

Template parameters

  • Type - type of values to operate on.
  • Values... - set of values to operate on. If this set is empty whole operation is not defined. If set is single element then whole operation is evaluated to that element.

Layout

Member constants

  • value - holds result of operation. If Values... is single element, value holds that element.

Member types

  • value_type - type of field value. May not be Type but should be castable to this type.

Member functions

  • constexpr operator value_type () const noexcept - casts whole object to its value_type returning value.

Usage example

#include <crap/functional.d/modulusvalue.h>

int main()
{
 static_assert(crap :: modulusValue<unsigned int, 42u>{} == 42u, "42 should be 42");
 static_assert(crap :: modulusValue<unsigned int, 42u, 7u>{} == 0u, "42 % 7 should be 0");
 static_assert(crap :: modulusValue<unsigned int, 101u, 42u>{} == 17u, "101 % 42 should be 17");
 static_assert(crap :: modulusValue<unsigned int, 42u, 35u, 3u>{} == ((42u % 35u) % 3u),
 "42 % 35 % 3 should be 1");
 static_assert(crap :: modulusValue<unsigned int, 101u, 42u, 12u, 3u, 2u>{} == ((((101u % 42u) % 12u) % 3u) % 2u),
 "101 % 42 % 12 % 3 % 2 should be 0");
 return 0;
}

See also