Namespaces
Variants

std::meta::is_enumerable_type

С ru.cppreference.net
< cpp | meta
 
 
 
Библиотека отражения
Запросы доступности членов
Идентификация области видимости
Запросы членов отражения
Отражение аннотаций
Извлечение значений
Подстановка отражения
Отражение результата выражения
Генерация определения класса

Основные категории типов
Составные категории типов
Свойства типов ➜
Отношения типов
 
Типы и запросы отражения
Запросы отражения
Запросы расположения отражения
Свойства типов
Запросы свойств типов
 
Определено в заголовочном файле <meta>
consteval bool is_enumerable_type( std::meta::info r );
(начиная с C++26)

Определяет, представляет ли r полный тип класса или тип перечисления, список перечислителей которого полностью определён, или псевдоним такого типа.

Формально, тип T является перечисляемым из точки P если:

  • T является полным типом класса в точке P или
  • T является типом перечисления, определённым объявлением D таким, что D достижим из P и P не находится внутри спецификатора перечисления для D.

Параметры

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

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

true если std::meta::dealias(r) представляет тип, который является перечисляемым из некоторой точки в контексте вычисления, false в противном случае

Примечания

Стандартные функции отражения требуют, чтобы тип был перечисляемым для получения его списка баз, членов или перечислителей.

Пример

#include <meta>

struct A; // incomplete type
static_assert(std::meta::is_enumerable_type(^^A) == false);

struct B {}; // complete type
static_assert(std::meta::is_enumerable_type(^^B) == true);

template <typename>
struct C; // incomplete class template
static_assert(std::meta::is_enumerable_type(^^C<long>) == false);

template <>
struct C<int> {}; // complete explicit template specialization
static_assert(std::meta::is_enumerable_type(^^C<int>) == true);

template <>
struct C<long>; // incomplete explicit template specialization
static_assert(std::meta::is_enumerable_type(^^C<long>) == false);

enum class E;
static_assert(std::meta::is_enumerable_type(^^E) == false);

enum class E { e };
static_assert(std::meta::is_enumerable_type(^^E) == true);
static_assert(std::meta::is_enumerable_type(^^E::e) == false);

union U;
static_assert(std::meta::is_enumerable_type(^^U) == false);

union U { int i; short j; };
static_assert(std::meta::is_enumerable_type(^^U) == true);

int main() {}

См. также

проверяет, представляет ли отражение полный тип
(функция)