Spec-Zone.ru › C++

std::meta::is_function_type

Определён в заголовочном файле <meta>
consteval bool is_function_type( std::meta::info r );
(начиная с C++26)

Возвращает true, если r представляет тип функции. В противном случае возвращает false.

Такие типы, как std::function, лямбды, классы с перегруженным operator() и указатели на функции, не являются типами функций.

Параметры

r - значение отражения

Возвращаемое значение

true, если r представляет тип функции; в противном случае false.

Исключения

Выбрасывает std::meta::exception, если r не представляет тип или псевдоним типа.

Пример

#include <functional>
#include <meta>

int f();

struct O
{
    void operator()() {}
};

static_assert
(""
    &&   is_function_type(^^decltype(f))
    && ! is_function_type(^^int)
    &&   is_function_type(^^int(int))
    && ! is_function_type(^^decltype([]{}))
    &&   is_function_type(^^O())
    && ! is_function_type(^^std::function<void()>)
);

struct A
{
    static int foo();
    int fun() const&;
    int operator()();
};

static_assert
(""
    && ! is_function_type(^^A)
    &&   is_function_type(^^decltype(A::foo))
    && ! is_function_type(^^decltype(&A::fun))
    && ! is_function_type(^^decltype(&A::operator()))
);

template<typename>
struct is_member_pointer {};

template<class T, class U>
struct is_member_pointer<U T::*> { using type = U; };

using T = is_member_pointer<decltype(&A::fun)>::type; // T is int() const&
static_assert(is_function_type(^^T));

int main() {}

См. также

is_invocable_typeis_invocable_r_typeis_nothrow_invocable_typeis_nothrow_invocable_r_type
(C++26)(C++26)(C++26)(C++26)
проверяет, можно ли вызвать отражённый тип (как если бы это делалось с помощью std::invoke) с заданными типами аргументов
(шаблон функции)
is_object_type
(C++26)
проверяет, является ли отражённый тип объектным типом
(функция)
is_class_type
(C++26)
проверяет, является ли отражённый тип типом класса, не являющегося объединением
(функция)
is_function
(C++11)
проверяет, является ли тип типом функции
(шаблон класса)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/meta/is_function_type

Spec-Zone.ru

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