Namespaces
Variants

std::meta::annotations_of

Depuis fr.cppreference.net
< cpp | meta
 
 
 
Bibliothèque de réflexion
Catégories de types primaires
Catégories de types composites
Propriétés de types ➜
Relations de types
 
Types et requêtes de réflexion
Requêtes de réflexion
Requêtes de disposition de réflexion
Propriétés de types
Requêtes de propriétés de types
 
Défini dans l'en-tête <meta>
consteval std::vector<std::meta::info> annotations_of( std::meta::info item );
(depuis C++26)

Retourne un vecteur contenant les réflexions des annotations qui s'appliquent à l'entité représentée par item.

Si item représente un paramètre de fonction P d'une fonction F, alors soit S l'ensemble des déclarations, en ignorant toutes les instanciations explicites, qui sont accessibles depuis un point du contexte d'évaluation et qui déclarent soit F soit une fonction template dont F est une spécialisation, le résultat contient les réflexions de toutes les annotations qui s'appliquent à P dans chaque déclaration de S.

Si item représente une relation de classe de base directe, le résultat contient les réflexions de toutes les annotations qui s'appliquent au base-specifier correspondant.

Pour deux réflexions quelconques R1 et R2 dans le vecteur retourné, si l'annotation représentée par R1 précède l'annotation représentée par R2, alors R1 est avant R2 dans le vecteur. Si R1 et R2 représentent des annotations de la même unité de traduction T, tous les éléments entre R1 et R2 dans le vecteur retourné représentent des annotations de T. L'ordre n'est pas spécifié autrement.

Paramètres

item - une valeur de réflexion

Valeur de retour

un vecteur contenant les réflexions des annotations qui s'appliquent à ce que item représente.

Exceptions

Lève std::meta::exception sauf si item représente l'un des éléments suivants :

  • type
  • alias de type
  • variable
  • fonction
  • paramètre de fonction
  • espace de noms
  • énumérateur
  • relation de classe de base directe
  • membre de donnée non statique

Exemple

#include <meta>
#include <print>

template<class T>
struct [[=42]] D {};

constexpr std::meta::info a1 = std::meta::annotations_of(^^D<int>)[0];
constexpr std::meta::info a2 = std::meta::annotations_of(^^D<char>)[0];
static_assert(a1 != a2);
static_assert(std::meta::constant_of(a1) == std::meta::constant_of(a2));

[[=1]] int x, y;
static_assert(std::meta::annotations_of(^^x)[0] == std::meta::annotations_of(^^y)[0]);

int main()
{
    [[=3.14]] typedef int var;
    typedef int var [[=42]];

    static constexpr auto annotations =
        std::define_static_array(std::meta::annotations_of(^^var));
    template for (constexpr auto ann : annotations) {
        std::println("{}", [:std::meta::constant_of(ann):]);
    }
}

Sortie :

3.14
42

Voir aussi

obtient les annotations qui s'appliquent à l'entité reflétée et qui ont le type spécifié
(fonction)
vérifie si la réflexion représente une annotation
(fonction)
obtient une réflexion de la valeur constante de l'entité reflétée
(fonction)
(C++26)
obtient une réflexion du type de l'entité reflétée
(fonction)