Spec-Zone.ru › C++

std::is_invocable, std::is_invocable_r, std::is_nothrow_invocable, std::is_nothrow_invocable_r

Определён в заголовочном файле <type_traits>
template< class Fn, class... ArgTypes >
struct is_invocable;
(1) (начиная с C++17)
template< class R, class Fn, class... ArgTypes >
struct is_invocable_r;
(2) (начиная с C++17)
template< class Fn, class... ArgTypes >
struct is_nothrow_invocable;
(3) (начиная с C++17)
template< class R, class Fn, class... ArgTypes >
struct is_nothrow_invocable_r;
(4) (начиная с C++17)
1) Определяет, является ли INVOKE(std::declval<Fn>(),std::declval<ArgTypes>()...) корректным выражением, если оно рассматривается как невычисляемый операнд.
2) Определяет, является ли INVOKE<R>(std::declval<Fn>(),std::declval<ArgTypes>()...) корректным выражением, если оно рассматривается как невычисляемый операнд.
3) Определяет, является ли INVOKE(std::declval<Fn>(),std::declval<ArgTypes>()...) корректным выражением, если оно рассматривается как невычисляемый операнд, и гарантированно не выбрасывает исключений.
4) Определяет, является ли INVOKE<R>(std::declval<Fn>(),std::declval<ArgTypes>()...) корректным выражением, если оно рассматривается как невычисляемый операнд, и гарантированно не выбрасывает исключений.

Если Fn, R или какой-либо тип из пакета параметров ArgTypes не является полным типом, (возможно, cv-квалифицированным) void или массивом неизвестной границы, поведение не определено.

Если инстанцирование шаблона, описанного выше, прямо или косвенно зависит от неполного типа и результат этого инстанцирования мог бы измениться, если бы этот тип был гипотетически завершён, поведение не определено.

Если программа добавляет специализации для любого из шаблонов, описанных на этой странице, поведение не определено.

Вспомогательные переменные-шаблоны

Определены в заголовочном файле <type_traits>
template< class Fn, class... ArgTypes >
inline constexpr bool is_invocable_v =
    std::is_invocable<Fn, ArgTypes...>::value;
(1) (начиная с C++17)
template< class R, class Fn, class... ArgTypes >
inline constexpr bool is_invocable_r_v =
    std::is_invocable_r<R, Fn, ArgTypes...>::value;
(2) (начиная с C++17)
template< class Fn, class... ArgTypes >
inline constexpr bool is_nothrow_invocable_v =
    std::is_nothrow_invocable<Fn, ArgTypes...>::value;
(3) (начиная с C++17)
template< class R, class Fn, class... ArgTypes >
inline constexpr bool is_nothrow_invocable_r_v =
    std::is_nothrow_invocable_r<R, Fn, ArgTypes...>::value;
(4) (начиная с C++17)

Унаследовано от std::integral_constant

Члены-константы

value
[static]
true, если (для перегрузки (1)) INVOKE(std::declval<Fn>(),std::declval<ArgTypes>()...) является корректным выражением, когда рассматривается как невычисляемый операнд; в противном случае — false
(общедоступная статическая константа-член)

Функции-члены

operator bool
преобразует объект в bool, возвращает value
(общедоступная функция-член)
operator()
(C++14)
возвращает value
(общедоступная функция-член)

Типы-члены

Тип Определение
value_type bool
type std::integral_constant<bool,value>

Примечания

Макрос проверки поддержки возможности Значение Стандарт Возможность
__cpp_lib_is_invocable 201703L (C++17) std::is_invocable, std::invoke_result

Примеры

#include <type_traits>

auto func2(char) -> int (*)()
{
    return nullptr;
}

int main()
{
    static_assert(std::is_invocable_v<int()>);
    static_assert(not std::is_invocable_v<int(), int>);
    static_assert(std::is_invocable_r_v<int, int()>);
    static_assert(not std::is_invocable_r_v<int*, int()>);
    static_assert(std::is_invocable_r_v<void, void(int), int>);
    static_assert(not std::is_invocable_r_v<void, void(int), void>);
    static_assert(std::is_invocable_r_v<int(*)(), decltype(func2), char>);
    static_assert(not std::is_invocable_r_v<int(*)(), decltype(func2), void>);
}

См. также

invokeinvoke_r
(C++17)(C++23)
вызывает любой объект Callable с заданными аргументами с возможностью указать возвращаемый тип(начиная с C++23)
(функция-шаблон)
result_ofinvoke_result
(C++11)(удалён в C++20)(C++17)
определяет тип результата вызова вызываемого объекта с набором аргументов
(шаблон класса)
declval
(C++11)
получает ссылку на объект типа аргумента шаблона для использования в невычисляемом контексте
(функция-шаблон)
invocableregular_invocable
(C++20)(C++20)
задаёт требование, согласно которому вызываемый тип можно вызвать с заданным набором типов аргументов
(концепт)
is_invocable_typeis_invocable_r_typeis_nothrow_invocable_typeis_nothrow_invocable_r_type
(C++26)(C++26)(C++26)(C++26)
проверяет, можно ли вызвать отражённый тип (как если бы использовался std::invoke) с заданными типами аргументов
(функция-шаблон)

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

Spec-Zone.ru

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