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>);
}См. также
|
(C++17)(C++23) |
вызывает любой Callable объект с заданными аргументами и возможностью указать тип возвращаемого значения(с C++23) (шаблон функции) |
|
(C++11)(удалено в C++20)(C++17) |
вычисляет тип результата вызова вызываемого объекта с набором аргументов (шаблон класса) |
|
(C++11) |
получает ссылку на аргумент для использования в неоцениваемом контексте (шаблон функции) |
|
(C++20) |
определяет, что вызываемый тип может быть вызван с заданным набором типов аргументов (концепция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/types/is_invocable