Namespaces
Variants

std::meta::is_enumerable_type

De es.cppreference.net
< cpp | meta
 
 
 
Biblioteca de reflexión
 
Tipos y consultas de reflexión
Consultas de reflexión
Consultas de diseño de reflexión
Propiedades de tipo
Consultas de propiedad de tipo
 
Definido en el encabezado <meta>
consteval bool is_enumerable_type( std::meta::info r );
(desde C++26)

Determina si r representa un tipo de clase completo o un tipo de enumeración cuya lista de enumeradores está completamente definida, o un alias de tipo del mismo.

Formalmente, un tipo T es enumerable desde un punto P si:

  • T es un tipo de clase completo en el punto P o
  • T es un tipo de enumeración definido por una declaración D tal que D es accesible desde P y P no ocurre dentro de un especificador de enumeración de D.

Parámetros

r - un valor de reflexión

Valor de retorno

true true si std::meta::dealias(r) representa un tipo que es enumerable desde algún punto en el contexto de evaluación, false false en caso contrario

Notas

Las funciones de reflexión estándar requieren que un tipo sea enumerable para obtener su lista de bases, miembros o enumeradores.

Ejemplo

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

Véase también

comprueba si la reflexión representa un tipo completo
(función)