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

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]

[edit] See also