std::invocable, std::regular_invocable
Определено в заголовке <concepts> | ||
|---|---|---|
template< class F, class... Args >
concept invocable =
requires(F&& f, Args&&... args) {
std::invoke(std::forward<F>(f), std::forward<Args>(args)...);
/* not required to be equality-preserving */
};
| (с 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 (исключая комичные примеры).
См. также
|
(C++17) | проверяет, может ли тип быть вызван (как если бы это было сделано std::invoke) с заданными типами аргументов (шаблон класса) |
Внешние ссылки
| 1. | Пример шутки генератора случайных чисел, удовлетворяющего одновременно invocable и regular_invocable. |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/concepts/invocable