std::meta::is_invocable_type, std::meta::is_invocable_r_type, std::meta::is_nothrow_invocable_type, std::meta::is_nothrow_invocable_r_type
Определён в заголовке <meta> | ||
|---|---|---|
template< std::meta::reflection_range Args = std::initializer_list<std::meta::info> > consteval bool is_invocable_type( std::meta::info fn_type, Args&& arg_types ); | (1) | (начиная с C++26) |
template< std::meta::reflection_range Args = std::initializer_list<std::meta::info> >
consteval bool is_invocable_r_type( std::meta::info result_type,
std::meta::info fn_type,
Args&& arg_types );
| (2) | (начиная с C++26) |
template< std::meta::reflection_range Args = std::initializer_list<std::meta::info> > consteval bool is_nothrow_invocable_type( std::meta::info fn_type, Args&& arg_types ); | (3) | (начиная с C++26) |
template< std::meta::reflection_range Args = std::initializer_list<std::meta::info> >
consteval bool is_nothrow_invocable_r_type( std::meta::info result_type,
std::meta::info fn_type,
Args&& arg_types );
| (4) | (начиная с C++26) |
Определяет, можно ли вызвать отражённый тип (как если бы с помощью std::invoke) с заданными типами аргументов.
Пусть
-
Fn— тип или псевдоним типа, представленныйfn_type, -
Result— тип или псевдоним типа, представленныйresult_type, и -
ARGS...— набор типов или псевдонимов типов, элементы которого представлены соответствующими элементамиarg_types.
1) Эквивалентно
return std::is_invocable_v<Fn, ARGS...>;.
2) Эквивалентно
return std::is_invocable_r_v<Result, Fn, ARGS...>;.
3) Эквивалентно
return std::is_nothrow_invocable_v<Fn, ARGS...>;.
4) Эквивалентно
return std::is_nothrow_invocable_r_v<Result, Fn, ARGS...>;.Параметры шаблона
| Args | - | список инициализации, элементы которого представляют типы аргументов вызова |
Параметры
| fn_type | - | отражённый тип вызываемого объекта |
| arg_types | - | отражённые типы аргументов вызова |
| result_type | - | отражённый тип результата вызова |
Возвращаемое значение
true, если отражённый тип fn_type можно вызвать с заданными типами аргументов. В противном случае — false.
Исключения
Выбрасывает std::meta::exception:
- Если
fn_type,result_typeили какой-либо элементarg_typesне представляет тип или псевдоним типа. - Если
Fn,Resultили какой-либо тип в набореARGS...не является полным типом, (возможно, cv-квалифицированным) void или массивом неизвестного размера. - Если инстанцирование шаблона (1-4) прямо или косвенно зависит от неполного типа, и это инстанцирование могло бы дать другой результат, если бы этот тип гипотетически был полным.
Пример
#include <meta>
auto func(char) -> int(*)();
static_assert
(""
&& is_invocable_type(^^void(int, char), {^^int, ^^char})
&& !is_invocable_type(^^void(void), {^^int})
&& is_invocable_type(^^decltype(func), {^^char})
&& !is_invocable_type(^^decltype(int()), {^^int})
&& is_invocable_r_type(^^void, ^^void(int), {^^int})
&& !is_invocable_r_type(^^void, ^^void(int), {^^void})
&& is_invocable_r_type(^^int(*)(), ^^decltype(func), {^^char})
&& !is_invocable_r_type(^^int(*)(), ^^decltype(func), {^^void})
);
int main() {}
См. также
|
(C++17)(C++23) | вызывает любой объект Callable с заданными аргументами и позволяет указать тип возвращаемого значения(начиная с C++23) (шаблон функции) |
|
(C++26) | выводит тип результата вызова вызываемого объекта с набором аргументов (шаблон функции) |
|
(C++26)(C++26) | проверяет, можно ли вызвать вызываемый объект (как если бы с помощью std::invoke) с кортежем аргументов (функция) |
|
(C++11) | получает ссылку на объект типа аргумента шаблона для использования в невычисляемом контексте (шаблон функции) |
|
(C++20)(C++20) | задаёт требование, согласно которому вызываемый тип можно вызвать с заданным набором типов аргументов (концепт) |
|
(C++17)(C++17)(C++17)(C++17) | проверяет, можно ли вызвать тип (как если бы с помощью std::invoke) с заданными типами аргументов (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/meta/is_invocable_type