std::is_invocable, std::is_invocable_r, std::is_nothrow_invocable, std::is_nothrow_invocable_r
Материал из cppreference.com
Определено в заголовочном файле <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 = | (1) | (начиная с C++17) |
template<class R, class Fn, class... ArgTypes> inlineconstexprbool is_invocable_r_v = | (2) | (начиная с C++17) |
template<class Fn, class... ArgTypes> inlineconstexprbool is_nothrow_invocable_v = | (3) | (начиная с C++17) |
template<class R, class Fn, class... ArgTypes> inlineconstexprbool is_nothrow_invocable_r_v = | (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_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>);}
[править]Смотрите также
(C++17)(C++23) | вызывает любой Callable объект с данными аргументами и имеет возможность указать тип возврата(начиная с C++23) (шаблон функции) |
(C++11)(удалено в C++20)(C++17) | выводит тип результата вызова вызываемого объекта с набором аргументов (шаблон класса) |
(C++11) | получает ссылку на свой аргумент для использования в невычисленном контексте (шаблон функции) |
(C++20) | указывает, что вызываемый тип может быть вызван с заданным набором типов аргументов (концепт) |