Namespaces
Variants

Annotations (depuis C++26)

Depuis fr.cppreference.net
 
 
Langage C++
Sujets généraux
Contrôle de flux
Instructions d'exécution conditionnelle
if
Instructions d'itération (boucles)
for
range-for (C++11)
Instructions de saut
Fonctions
Déclaration de fonction
Expression de fonction lambda
inline spécificateur
Spécifications d'exception dynamiques (jusqu'à C++17*)
noexcept spécificateur (C++11)
Exceptions
Espaces de noms
Types
Spécificateurs
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Spécificateurs de durée de stockage
Initialisation
Expressions
Représentations alternatives
Littéraux
Booléen - Entier - Virgule flottante
Caractère - Chaîne de caractères - nullptr (C++11)
Défini par l'utilisateur (C++11)
Utilitaires
Attributs (C++11)
Types
typedef déclaration
Déclaration d'alias de type (C++11)
Conversions de type (casts)
Allocation de mémoire
Classes
Propriétés de fonctions spécifiques à une classe
explicit (C++11)
static

Fonctions membres spéciales
Templates
Divers
 

Attacher des informations aux déclarations d'une manière que la réflexion peut observer.

Syntaxe

La liste des annotations est introduite dans un spécificateur d'attribut. Chaque annotation commence par =.

= expression-constante

Explication

Une annotation peut être appliquée à toute déclaration d'un type, d'un alias de type, d'une variable, d'une fonction, d'un paramètre de fonction de type non void, d'un espace de noms, d'un énumérateur, d'un spécificateur de base, ou d'un membre de données non statique.

Soit E égal à std::meta::reflect_constant(expr) (où expr est l'expression-constante), E doit être une expression constante. Le résultat de E peut être observé en appelant std::meta::constant_of sur la réflexion de l'annotation.

Les annotations sont toujours distinctes les unes des autres, même si elles ont des valeurs équivalentes et sont appliquées à la même déclaration.

[[=42, =42]] int x;
static_assert(std::meta::annotations_of(^^x).size() == 2);

[[=42]] int f();
[[=24]] int f();
static_assert(std::meta::annotations_of(^^f).size() == 2);

La substitution dans une annotation n'est pas un contexte immédiat.

Exemple

Voir aussi

obtient les annotations applicables à l'entité réfléchie
(fonction)
obtient les annotations applicables à l'entité réfléchie et ayant le type spécifié
(fonction)