home | help
std::modulus(3) 	       C++ Standard Libary		 std::modulus(3)

NAME
     std::modulus - std::modulus

Synopsis
	Defined in header <functional>
	template<>			(since C++14)
	class modulus<void>;

	std::modulus<void>  is	a  specialization of std::modulus with parameter
     and return
	type deduced.

Member functions
	operator() returns the modulus of two arguments
		   (public member function)

     std::modulus<void>::operator()

	template< class T, class U >

	constexpr auto operator()( T&& lhs, U&& rhs ) const

	    -> decltype(std::forward<T>(lhs) % std::forward<U>(rhs));

	Returns the remainder of the division of lhs by rhs.

Parameters
	lhs, rhs - values to divide

Return value
	std::forward<T>(lhs) % std::forward<U>(rhs).

Example
     // Run this code

      #include <functional>
      #include <iostream>

      struct M
      {
	  M(int x) { std::cout << "M(" << x << ");\n"; }
	  M() {}
      };

      auto operator%(M, M) { std::cout << "operator%(M, M);\n"; return M{}; }
      auto operator%(M, int) { std::cout << "operator%(M, int);\n"; return  M{};
     }
      auto  operator%(int, M) { std::cout << "operator%(int, M);\n"; return M{};
     }

      int main()
      {
	  M m;

	  // 42 is converted into a temporary object M{42}
	  std::modulus<M>{}(m, 42);    // calls operator%(M, M)

	  // no temporary object
	  std::modulus<void>{}(m, 42); // calls operator%(M, int)
	  std::modulus<void>{}(42, m); // calls operator%(int, M)
      }

Output:
      M(42);
      operator%(M, M);
      operator%(M, int);
      operator%(int, M);

http://cppreference.com 	   2024.06.10			 std::modulus(3)

home | help