std::meta::is_enumerable_type
Depuis fr.cppreference.net
| 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 :
Test un type de classe complet au point P ouTest un type d'énumération défini par une déclarationDtelle queDest accessible depuis P et P n'apparaît pas dans un enum-specifier deD.
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
Exécuter ce code
#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
(C++26) |
vérifie si la réflexion représente un type complet (fonction) |