std::invocable,std::regular_invocable(3)

NAME
std::invocable,std::regular_invocable - std::invocable,std::regular_invocable

Synopsis
   Defined in header <concepts>
   template< class F, class... Args >
   concept invocable =
       requires(F&& f, Args&&... args) { (since C++20)
           std::invoke(std::forward<F>(f), std::forward<Args>(args)...);
               /* not required to be equality-preserving */
       };
   template< class F, class... Args > (since C++20)
   concept regular_invocable = std::invocable<F, Args...>;
   The invocable concept specifies that a callable type F can be called with a set of
   arguments Args... using the function template std::invoke.
   The regular_invocable concept adds to the invocable concept by requiring the invoke
   expression to be equality-preserving and not modify either the function object or
   the arguments.

Notes
   The distinction between invocable and regular_invocable is purely semantic.
   A random number generator may satisfy invocable but cannot satisfy regular_invocable
   (comical ones excluded).

See also
   is_invocable
   is_invocable_r checks if a type can be invoked (as if by std::invoke) with
   is_nothrow_invocable the given argument types
   is_nothrow_invocable_r (class template)
   (C++17)

External links
   1. A joke example of a random number generator that satisfies both invocable and
       regular_invocable.