Namespaces
Variants
Actions

std::modulus<void>

From cppreference.com
< cpp‎ | utility‎ | functional
 
 
 
Function objects
Function invocation
(C++17)(C++23)
Identity function object
(C++20)
Transparent operator wrappers
(C++14)
(C++14)
(C++14)
(C++14)  
(C++14)
modulus<>
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
Old binders and adaptors
(until C++17*)
(until C++17*)
(until C++17*)
(until C++17*)  
(until C++17*)
(until C++17*)(until C++17*)(until C++17*)(until C++17*)
(until C++20*)
(until C++20*)
(until C++17*)(until C++17*)
(until C++17*)(until C++17*)

(until C++17*)
(until C++17*)(until C++17*)(until C++17*)(until C++17*)
(until C++20*)
(until C++20*)
 
Defined in header <functional>
template<>
class modulus<void>;
(since C++14)

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

Contents

[edit]Nested types

Nested type Definition
is_transparentunspecified

[edit]Member functions

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

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

template<class T, class U >

constexprauto 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).

[edit]Example

#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 objectstd::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);
close