std:: is_assignable, std:: is_trivially_assignable, std:: is_nothrow_assignable
| 
           
           Défini dans l'en-tête
            
         
            
             <type_traits>
            
           
           | 
         ||
| 
           
           
            
             template
            
            
             <
            
            
             class
            
            T,
            
             class
            
            U
            
             >
            
             
         struct is_assignable ;  | 
         (1) | (depuis C++11) | 
| 
           
           
            
             template
            
            
             <
            
            
             class
            
            T,
            
             class
            
            U
            
             >
            
             
         struct is_trivially_assignable ;  | 
         (2) | (depuis C++11) | 
| 
           
           
            
             template
            
            
             <
            
            
             class
            
            T,
            
             class
            
            U
            
             >
            
             
         struct is_nothrow_assignable ;  | 
         (3) | (depuis C++11) | 
       Si
       
        T
       
       ou
       
        U
       
       n'est pas un type complet, (éventuellement qualifié cv)
       
        
         void
        
       
       , ou un tableau de limite inconnue, le comportement est indéfini.
      
Si une instanciation d'un template ci-dessus dépend, directement ou indirectement, d'un type incomplet, et que cette instanciation pourrait produire un résultat différent si ce type était hypothétiquement complété, le comportement est indéfini.
Si le programme ajoute des spécialisations pour l'un des modèles décrits sur cette page, le comportement est indéfini.
         Table des matières | 
       
Modèles de variables d'assistance
| 
           
           
            
             template
            
            
             <
            
            
             class
            
            T,
            
             class
            
            U
            
             >
            
             
         constexpr bool is_assignable_v = is_assignable < T, U > :: value ;  | 
         (depuis C++17) | |
| 
           
           
            
             template
            
            
             <
            
            
             class
            
            T,
            
             class
            
            U
            
             >
            
             
         constexpr bool is_trivially_assignable_v = is_trivially_assignable < T, U > :: value ;  | 
         (depuis C++17) | |
| 
           
           
            
             template
            
            
             <
            
            
             class
            
            T,
            
             class
            
            U
            
             >
            
             
         constexpr bool is_nothrow_assignable_v = is_nothrow_assignable < T, U > :: value ;  | 
         (depuis C++17) | |
Hérité de std:: integral_constant
Constantes membres
| 
           
            
             
              value
             
            
            
           
            
             
              
               [static]
              
             
            
            
           | 
         
          
           
            
             true
            
           
          
          si
          
           T
          
          est assignable depuis
          
           U
          
          ,
          
           
            
             false
            
           
          
          sinon
          (constante membre publique statique)  | 
        
Fonctions membres
| 
           
            
             
              operator bool
             
            
            
           | 
         
          convertit l'objet en
          
           
            bool
           
          
          , retourne
          
           
            value
           
          
           (fonction membre publique)  | 
        
| 
           
            
             
              operator()
             
            
            
           
            
             
              
               (C++14)
              
             
            
            
           | 
         
          retourne
          
           
            value
           
          
           (fonction membre publique)  | 
        
Types membres
| Type | Définition | 
          
           value_type
          
          | 
         bool | 
          
           type
          
          | 
         std:: integral_constant < bool , value > | 
Notes
       Ce trait ne vérifie rien en dehors du contexte immédiat de l'expression d'assignation : si l'utilisation de
       
        T
       
       ou
       
        U
       
       déclenchait des spécialisations de templates, la génération de fonctions membres spéciales implicitement définies, etc., et que celles-ci contiennent des erreurs, l'assignation réelle pourrait ne pas compiler même si
       
        std
        
         ::
        
        
         is_assignable
        
        
         <
        
        T,U
        
         >
        
        
         ::
        
        
         value
        
       
       compile et s'évalue à
       
        
         
          true
         
        
       
       .
      
Exemple
#include <iostream> #include <string> #include <type_traits> struct Ex1 { int n; }; int main() { std::cout << std::boolalpha << "int is assignable from int? " << std::is_assignable<int, int>::value << '\n' // 1 = 1; wouldn't compile << "int& is assignable from int? " << std::is_assignable<int&, int>::value << '\n' // int a; a = 1; works << "int is assignable from double? " << std::is_assignable<int, double>::value << '\n' << "int& is nothrow assignable from double? " << std::is_nothrow_assignable<int&, double>::value << '\n' << "string is assignable from double? " << std::is_assignable<std::string, double>::value << '\n' << "Ex1& is trivially assignable from const Ex1&? " << std::is_trivially_assignable<Ex1&, const Ex1&>::value << '\n'; }
Sortie :
int is assignable from int? false int& is assignable from int? true int is assignable from double? false int& is nothrow assignable from double? true string is assignable from double? true Ex1& is trivially assignable from const Ex1&? true
Voir aussi
| 
          
           
            
             
              (C++11)
             
            
            
             
              (C++11)
             
            
            
             
              (C++11)
             
            
           
           
          | 
        
         vérifie si un type a un opérateur d'affectation par copie
          (modèle de classe)  | 
       
| 
          
           
            
             
              (C++11)
             
            
            
             
              (C++11)
             
            
            
             
              (C++11)
             
            
           
           
          | 
        
         vérifie si un type a un opérateur d'affectation par déplacement
          (modèle de classe)  | 
       
| 
          
           
            
             
              (C++20)
             
            
           
           
          | 
        
         spécifie qu'un type peut être assigné à partir d'un autre type
          (concept)  |