std::meta::is_enumerable_type
De es.cppreference.net
| 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:
Tes un tipo de clase completo en el punto P oTes un tipo de enumeración definido por una declaraciónDtal queDes accesible desde P y P no ocurre dentro de un especificador de enumeración deD.
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
Ejecutar este código
#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
(C++26) |
comprueba si la reflexión representa un tipo completo (función) |