C++ attribute: deprecated (since C++14)
Indique que le nom ou l'entité déclaré avec cet attribut est déprécié , c'est-à-dire que son utilisation est autorisée, mais déconseillée pour certaines raisons.
         Table des matières | 
       
Syntaxe
         
          
           
            
             [
            
            
             [
            
            deprecated
            
             ]
            
            
             ]
            
           
          
         
         | 
        (1) | ||||||||
         
          
           
            
             [
            
            
             [
            
           
           deprecated
           
            
             (
            
           
          
         
         
          littéral-de-chaîne
         
         
          
           
            
             )
            
            
             ]
            
            
             ]
            
           
          
         
         | 
        (2) | ||||||||
| string-literal | - | un littéral de chaîne non évalué qui pourrait être utilisé pour expliquer la justification de la dépréciation et/ou suggérer une entité de remplacement | 
Explication
Indique que l'utilisation du nom ou de l'entité déclaré(e) avec cet attribut est autorisée, mais déconseillée pour une certaine raison. Les compilateurs émettent généralement des avertissements pour de telles utilisations. Le string-literal , s'il est spécifié, est généralement inclus dans les avertissements.
Cet attribut est autorisé dans les déclarations des noms ou entités suivants :
- classe/struct/union , par exemple, struct [ [ deprecated ] ] S ; ,
 - nom de typedef , y compris ceux déclarés par déclaration d'alias , par exemple,
 
- 
        
- [ [ deprecated ] ] typedef S * PS ; ,
 - using PS [ [ deprecated ] ] = S * ; ,
 
 
- variable (non-membre), par ex., [ [ deprecated ] ] int x ; ,
 - membre de données statique , par ex., struct S { [ [ deprecated ] ] static constexpr char CR { 13 } ; } ; ,
 - membre de données non statique , par ex., union U { [ [ deprecated ] ] int n ; } ; ,
 - fonction , par ex., [ [ deprecated ] ] void f ( ) ; ,
 - espace de noms , par ex., namespace [ [ deprecated ] ] NS { int x ; } ,
 - énumération , par ex., enum [ [ deprecated ] ] E { } ; ,
 
         
  | 
        (depuis C++17) | 
- spécialisation de template , par exemple, template <> struct [ [ deprecated ] ] X < int > { } ; .
 
Un nom déclaré non obsolète peut être redéclaré obsolète. Un nom déclaré obsolète ne peut pas être rendu non obsolète en le redéclarant sans cet attribut.
Exemple
#include <iostream> [[deprecated]] void TriassicPeriod() { std::clog << "Triassic Period: [251.9 - 208.5] million years ago.\n"; } [[deprecated("Use NeogenePeriod() instead.")]] void JurassicPeriod() { std::clog << "Jurassic Period: [201.3 - 152.1] million years ago.\n"; } [[deprecated("Use calcSomethingDifferently(int).")]] int calcSomething(int x) { return x * 2; } int main() { TriassicPeriod(); JurassicPeriod(); }
Sortie possible :
Triassic Period: [251.9 - 208.5] million years ago.
Jurassic Period: [201.3 - 152.1] million years ago.
main.cpp:20:5: warning: 'TriassicPeriod' is deprecated [-Wdeprecated-declarations]
    TriassicPeriod();
    ^
main.cpp:3:3: note: 'TriassicPeriod' has been explicitly marked deprecated here
[[deprecated]]
  ^
main.cpp:21:5: warning: 'JurassicPeriod' is deprecated: Use NeogenePeriod() instead ⮠
 [-Wdeprecated-declarations]
    JurassicPeriod();
    ^
main.cpp:8:3: note: 'JurassicPeriod' has been explicitly marked deprecated here
[[deprecated("Use NeogenePeriod() instead")]]
  ^
2 warnings generated.
        Références
- Norme C++23 (ISO/CEI 14882:2024) :
 
- 
         
- 9.12.5 Attribut déprécié [dcl.attr.deprecated]
 
 
- Norme C++20 (ISO/CEI 14882:2020) :
 
- 
         
- 9.12.4 Attribut déprécié [dcl.attr.deprecated]
 
 
- Norme C++17 (ISO/IEC 14882:2017) :
 
- 
         
- 10.6.4 Attribut déprécié [dcl.attr.deprecated]
 
 
- Norme C++14 (ISO/CEI 14882:2014) :
 
- 
         
- 7.6.5 Attribut déprécié [dcl.attr.deprecated]
 
 
Voir aussi
| 
          
          
           
            Documentation C
           
          
          pour
          
           
            deprecated
           
          
          
         |