std::invocable, std::regular_invocable
Материал из cppreference.com
<tbody>
</tbody>
| Определено в заголовочном файле <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.
|