C++ attribute: maybe_unused (since C++17)
Supprime les avertissements sur les entités non utilisées.
Table des matières |
Syntaxe
[
[
maybe_unused
]
]
|
|||||||||
Explication
Cet attribut peut apparaître dans la déclaration des entités suivantes :
- classe : struct [ [ maybe_unused ] ] S ;
- typedef , y compris ceux déclarés par déclaration d'alias : [ [ maybe_unused ] ] typedef S * PS ; , using PS [ [ maybe_unused ] ] = S * ;
- variable, y compris membre de données statique : [ [ maybe_unused ] ] int x ;
- membre de données non statique : union U { [ [ maybe_unused ] ] int n ; } ; ,
- fonction : [ [ maybe_unused ] ] void f ( ) ;
- énumération : enum [ [ maybe_unused ] ] E { } ;
- énumérateur : enum { A [ [ maybe_unused ] ] , B [ [ maybe_unused ] ] = 42 } ;
- liaison structurée : [ [ maybe_unused ] ] auto [ a, b ] = std:: make_pair ( 42 , 0.23 ) ;
|
(depuis C++26) |
Pour les entités déclarées [ [ maybe_unused ] ] , si les entités ou leurs liaisons structurées ne sont pas utilisées, l'avertissement sur les entités inutilisées émis par le compilateur est supprimé.
|
Pour les étiquettes déclarées [ [ maybe_unused ] ] , si elles ne sont pas utilisées, l'avertissement concernant les étiquettes inutilisées émis par le compilateur est supprimé. |
(depuis C++26) |
Exemple
#include <cassert> [[maybe_unused]] void f([[maybe_unused]] bool thing1, [[maybe_unused]] bool thing2) { [[maybe_unused]] lbl: // l'étiquette « lbl » n'est pas utilisée, aucun avertissement [[maybe_unused]] bool b = not false and not true; assert(b); // en mode release, assert est supprimé à la compilation, et « b » n'est pas utilisé // aucun avertissement car il est déclaré [[maybe_unused]] } // les paramètres « thing1 » et « thing2 » ne sont pas utilisés, aucun avertissement int main() {}
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | S'applique à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| CWG 2360 | C++17 | ne pouvait pas appliquer [ [ maybe_unused ] ] aux liaisons structurées | autorisé |
Références
- Norme C++23 (ISO/IEC 14882:2024) :
-
- 9.12.8 Attribut Maybe unused [dcl.attr.unused]
- Norme C++20 (ISO/IEC 14882:2020) :
-
- 9.12.7 Attribut Maybe unused [dcl.attr.unused]
- Norme C++17 (ISO/IEC 14882:2017) :
-
- 10.6.6 Attribut peut-être inutilisé [dcl.attr.unused]
Voir aussi
|
Documentation C
pour
maybe_unused
|