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