Spec-Zone.ru › C++

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() {}

См. также

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

Spec-Zone.ru

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