7 Concepts library [concepts.lib]

7.6 Callable concepts [concepts.lib.callable]

7.6.2 Concept Invocable [concepts.lib.callable.invocable]

The Invocable concept specifies a relationship between a callable type ( ISO/IEC 14882:2014 §[func.def]) F and a set of argument types Args... which can be evaluated by the library function invoke ([func.invoke]).

template <class F, class... Args> concept bool Invocable = requires(F&& f, Args&&... args) { invoke(std::forward<F>(f), std::forward<Args>(args)...); // not required to be equality preserving };

Note: Since the invoke function call expression is not required to be equality-preserving ([concepts.lib.general.equality]), a function that generates random numbers may satisfy Invocable. — end note ]