std::meta::is_enumerable_type
Определено в заголовочном файле <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() {}
См. также
|
(C++26) | проверяет, представляет ли отражение полный тип (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/meta/is_enumerable_type