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. (since C++17)INVOKE<R> can be performed explicitly using the library function std::invoke_r. (since C++23)
Requirements
The type T satisfies Callable if
Given
f
, an object of typeT
ArgTypes
, 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 |