Namespaces
Variants

std::meta::is_enumerable_type

Depuis fr.cppreference.net
< cpp | meta
 
 
 
Bibliothèque de réflexion
 
Types et requêtes de réflexion
Requêtes de réflexion
Requêtes de disposition de réflexion
Propriétés de type
Requêtes de propriété de type
 
Défini dans l'en-tête <meta>
consteval bool is_enumerable_type( std::meta::info r );
(depuis C++26)

Détermine si r représente un complet type de classe ou un type d'énumération dont la liste d'énumérateurs est complètement définie, ou un alias de type de ceux-ci.

Formellement, un type T est énumérable depuis un point P si :

  • T est un type de classe complet au point P ou
  • T est un type d'énumération défini par une déclaration D telle que D est accessible depuis P et P n'apparaît pas dans un enum-specifier de D.

Paramètres

r - une valeur de réflexion

Valeur de retour

true si std::meta::dealias(r) représente un type qui est énumérable depuis un point dans le contexte d'évaluation, false sinon

Notes

Les fonctions de réflexion standard exigent qu'un type soit énumérable afin d'obtenir sa liste de bases, membres ou énumérateurs.

Exemple

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

Voir aussi

vérifie si la réflexion représente un type complet
(fonction)