Пространства имён
Варианты
Действия

std::invocable, std::regular_invocable

Материал из cppreference.com
< cpp‎ | concepts
 
 
 
Определено в заголовочном файле <concepts>
template< class F, class... Args >

concept invocable =
  requires(F&& f, Args&&... args) {
    std::invoke(std::forward<F>(f), std::forward<Args>(args)...);
      /* не требуется сохранения равенства */

  };
(начиная с C++20)
template< class F, class... Args >
concept regular_invocable = std::invocable<F, Args...>;
(начиная с C++20)

Концепт invocable определяет, что вызываемый тип F может быть вызван с набором аргументов Args... с использованием шаблона функции std::invoke.

Концепт regular_invocable дополняет концепт invocable, требуя, чтобы выражение invoke сохраняло равенство и не изменяло ни объект функции, ни аргументы.

Содержание

[править] Сохранение равенства

Выражения, объявленные в выражениях requires концептов стандартной библиотеки, должны сохранять равенство (если не указано иное).

[править] Примечание

Различие между invocable и regular_invocable чисто семантическое.

Генератор случайных чисел может соответствовать invocable, но не соответствовать regular_invocable (исключая комичные).

[править] Смотрите также

проверяет, может ли тип быть вызван (как если бы std::invoke) с заданными типами аргументов
(шаблон класса) [править]

[править] Внешние ссылки

1.  Примечательный пример генератора случайных чисел, который соответствует как invocable, так и regular_invocable.