C++ named requirements: Callable
A Callable type is a type for which the INVOKE and INVOKE<R> operations (used by, e.g., std::function, std::bind, and std:🧵:thread) are applicable.
INVOKE can be performed explicitly using the library function std::invoke. (od C++17)INVOKE<R> can be performed explicitly using the library function std::invoke_r. (od C++23)
Requirements
The type T satisfies Callable if
Given
f, an object of typeTArgTypes, suitable list of argument typesR, suitable return type
The following expressions must be valid:
| pub | Expression | Requirements |
| pub | | the expression is well-formed in unevaluated context |
Notes
Pointers to data members are Callable, even though no function calls take place.
Standard library
In addition, the following standard library facilities accept any Callable type (not just FunctionObject):
| pub | function(C++11) | wraps callable object of any copy constructible type with specified function call signature |
| pub | move_only_function(C++23) | wraps callable object of any type with specified function call signature |
| pub | bind(C++11) | binds one or more arguments to a function object |
| pub | bind_front(C++20) bind_back(C++23) | bind a variable number of arguments, in order, to a function object |
| pub | reference_wrapper(C++11) | CopyConstructible and CopyAssignable reference wrapper |
| pub | result_of(C++11) (removed in C++20) invoke_result(C++17) | deduces the result type of invoking a callable object with a set of arguments |
| pub | thread(C++11) | manages a separate thread |
| pub | jthread(C++20) | std::thread with support for auto-joining and cancellation |
| pub | call_once(C++11) | invokes a function only once even if called from multiple threads |
| pub | async(C++11) | runs a function asynchronously (potentially in a new thread) and returns a std::future that will hold the result |
| pub | packaged_task(C++11) | packages a function to store its return value for asynchronous retrieval |