table of contents
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 |