Scroll to navigation

std::invocable,std::regular_invocable(3) C++ Standard Libary std::invocable,std::regular_invocable(3)

NAME

std::invocable,std::regular_invocable - std::invocable,std::regular_invocable

Synopsis


Defined in header <concepts>
template< class F, class... Args >


concept invocable =
requires(F&& f, Args&&... args) { (since C++20)
std::invoke(std::forward<F>(f), std::forward<Args>(args)...);
/* not required to be equality-preserving */


};
template< class F, class... Args > (since C++20)
concept regular_invocable = std::invocable<F, Args...>;


The invocable concept specifies that a callable type F can be called with a set of
arguments Args... using the function template std::invoke.


The regular_invocable concept adds to the invocable concept by requiring the invoke
expression to be equality-preserving and not modify either the function object or
the arguments.

Notes


The distinction between invocable and regular_invocable is purely semantic.


A random number generator may satisfy invocable but cannot satisfy regular_invocable
(comical ones excluded).

See also


is_invocable
is_invocable_r checks if a type can be invoked (as if by std::invoke) with
is_nothrow_invocable the given argument types
is_nothrow_invocable_r (class template)
(C++17)

External links


1. A joke example of a random number generator that satisfies both invocable and
regular_invocable.

2024.06.10 http://cppreference.com