Пространства имён
Варианты
Действия

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

Материал из cppreference.com
< cpp‎ | types
 
 
Библиотека метапрограммирования
Свойства типов
Категории типов
(C++11)
(C++14)  
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Свойства типов
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(до C++20*)
(C++11)(устарело в C++20)
(C++11)
Константы свойств типа
Метафункции
(C++17)
Поддерживаемые операции
Запросы отношений и свойств
(C++11)
(C++11)
is_invocableis_invocable_ris_nothrow_invocableis_nothrow_invocable_r
(C++17)(C++17)(C++17)(C++17)
Модификации типов
Преобразования типов
(C++11)(устарело в C++23)
(C++11)(устарело в C++23)
(C++11)
(C++11)
(C++17)

(C++11)(до C++20*)(C++17)
Рациональная арифметика времени компиляции
Целочисленные последовательности времени компиляции
 
Определено в заголовочном файле <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>

inlineconstexprbool is_invocable_v =

    std::is_invocable<Fn, ArgTypes...>::value;
(1) (начиная с C++17)
template<class R, class Fn, class... ArgTypes>

inlineconstexprbool is_invocable_r_v =

    std::is_invocable_r<R, Fn, ArgTypes...>::value;
(2) (начиная с C++17)
template<class Fn, class... ArgTypes>

inlineconstexprbool is_nothrow_invocable_v =

    std::is_nothrow_invocable<Fn, ArgTypes...>::value;
(3) (начиная с C++17)
template<class R, class Fn, class... ArgTypes>

inlineconstexprbool 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 иначе
(public static константа-элемент)

Функции-элементы

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

Типы элементы

Тип Определение
value_typebool
typestd::integral_constant<bool, value>

[править]Примечание

Макрос тест функциональностиЗначениеСтандартКомментарий
__cpp_lib_is_invocable201703L(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>);}

[править]Смотрите также

(C++17)(C++23)
вызывает любой Callable объект с данными аргументами и имеет возможность указать тип возврата(начиная с C++23)
(шаблон функции)[править]
(C++11)(удалено в C++20)(C++17)
выводит тип результата вызова вызываемого объекта с набором аргументов
(шаблон класса)[править]
(C++11)
получает ссылку на свой аргумент для использования в невычисленном контексте
(шаблон функции)[править]
указывает, что вызываемый тип может быть вызван с заданным набором типов аргументов
(концепт)[править]
close