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

Ссылки

  • Стандарт C++23 (ISO/IEC 14882:2024):
    • 18.7.2 Концепция invocable [concept.invocable]
    • 18.7.3 Концепция regular_invocable [concept.regularinvocable]
  • Стандарт C++20 (ISO/IEC 14882:2020):
    • 18.7.2 Концепция invocable [concept.invocable]
    • 18.7.3 Концепция regular_invocable [concept.regularinvocable]

См. также

is_invocableis_invocable_ris_nothrow_invocableis_nothrow_invocable_r
(C++17)(C++17)(C++17)(C++17)
проверяет, можно ли вызвать тип (как если бы с помощью std::invoke) с заданными типами аргументов
(шаблон класса)

Внешние ссылки

Шуточный пример генератора случайных чисел, который удовлетворяет и invocable, и regular_invocable.

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/concepts/invocable

Spec-Zone.ru

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