std::experimental::ranges::Invocable, std::experimental::ranges::RegularInvocable
Min standard notice:
Header: <experimental/ranges/concepts>
The Invocable concept specifies that a callable type F can be called with a set of argument types Args… using the function template ranges::invoke.
# Declarations
template< class F, class... Args >
concept bool Invocable =
requires(F&& f, Args&&... args) {
ranges::invoke(std::forward<F>(f), std::forward<Args>(args)...);
/* not required to be equality preserving */
};
(ranges TS)
template< class F, class... Args >
concept bool RegularInvocable = Invocable<F, Args...>;
(ranges TS)
# Notes
The distinction between Invocable and RegularInvocable is purely semantic.
A random number generator may satisfy Invocable but cannot satisfy RegularInvocable (comical ones excluded).