Spec-Zone.ru › C++

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 (исключая комичные примеры).

См. также

is_invocableis_invocable_ris_nothrow_invocableis_nothrow_invocable_r
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API