std::invocable, std::regular_invocable
Defined in header <concepts>
|
||
|
template
<
class F, class... Args
>
concept invocable =
|
(since C++20) | |
|
template
<
class F, class... Args
>
concept regular_invocable = std:: invocable <F, Args...> ; |
(since C++20) | |
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
Equality preservation
Expressions declared in requires expressions of the standard library concepts are required to be equality-preserving
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).
References
- C++23 standard (ISO/IEC 14882:2024):
- 18.7.2 Concept
invocable[concept.invocable]
- 18.7.2 Concept
- 18.7.3 Concept
regular_invocable[concept.regularinvocable]
- 18.7.3 Concept
- C++20 standard (ISO/IEC 14882:2020):
- 18.7.2 Concept
invocable[concept.invocable]
- 18.7.2 Concept
- 18.7.3 Concept
regular_invocable[concept.regularinvocable]
- 18.7.3 Concept
See also
| checks if a type can be invoked (as if by std::invoke) with the given argument types (class template) |
External links
A joke example of a random number generator that satisfies both invocable and regular_invocable.
|