std:: totally_ordered, std:: totally_ordered_with
| 
           
           Défini dans l'en-tête
            
         
            
             <concepts>
            
           
           | 
         ||
| 
           
           
            
             template
            
            
             <
            
            
             class
            
            T
            
             >
            
             
         
             concept totalement_ordonné
             
              =
             
               | 
         (1) | (depuis C++20) | 
| 
           
           
            
             template
            
            
             <
            
            
             class
            
            T,
            
             class
            
            U
            
             >
            
             
         
             concept totalement_ordonné_avec
             
              =
             
               | 
         (2) | (depuis C++20) | 
| 
           
           Concepts auxiliaires
           
          | 
         ||
| 
           
           
            
             template
            
            
             <
            
            
             class
            
            T,
            
             class
            
            U
            
             >
            
             
         
             concept __PartiellementOrdonnéAvec
             
              =
             
               | 
         (3) | ( exposition uniquement* ) | 
        std::totally_ordered
       
       spécifie que les opérateurs de comparaison
       
        ==,!=,<,>,<=,>=
       
       sur un type produisent des résultats cohérents avec un
       
        ordre total strict
       
       sur le type.
      
        std::totally_ordered_with
       
       spécifie que les opérateurs de comparaison
       
        ==,!=,<,>,<=,>=
       
       sur des opérandes (éventuellement mixtes)
       
        T
       
       et
       
        U
       
       produisent des résultats cohérents avec un ordre total strict. La comparaison d'opérandes mixtes produit des résultats équivalents à la comparaison des opérandes convertis en leur type commun.
      
        
         __PartiallyOrderedWith
        
       
       spécifie qu'une valeur de type
       
        T
       
       et une valeur de type
       
        U
       
       peuvent être comparées selon un ordre partiel l'une avec l'autre (dans les deux sens) en utilisant
       
        <
       
       ,
       
        >
       
       ,
       
        <=
       
       , et
       
        >=
       
       , et que les résultats des comparaisons sont cohérents.
      
         Table des matières | 
       
Exigences sémantiques
Ces concepts sont modélisés uniquement s'ils sont satisfaits et si tous les concepts qu'ils subsument sont modélisés.
        a
       
       ,
       
        b
       
       et
       
        c
       
       de type
       
        
         
          const
         
         
          
           std::
           
            remove_reference_t
           
          
         
         
          <
         
         T
         
          >
         
        
       
       :
       - Exactement une des expressions bool ( a < b ) , bool ( a > b ) et bool ( a == b ) est true ;
 - Si bool ( a < b ) et bool ( b < c ) sont toutes deux true , alors bool ( a < c ) est true ;
 - bool ( a > b ) == bool ( b < a )
 - bool ( a >= b ) == ! bool ( a < b )
 - bool ( a <= b ) == ! bool ( b < a )
 
- 
         
tett2, des lvalues désignant des objets distincts mais égaux de types const std:: remove_reference_t < T > et std:: remove_reference_t < T > respectivement, et - 
         
uetu2, des lvalues désignant des objets distincts mais égaux de types const std:: remove_reference_t < U > et std:: remove_reference_t < U > respectivement, 
        Soit
        
         C
        
        le type
        
         
          
           
            std::
            
             common_reference_t
            
           
          
          
           <
          
          
           const
          
          
           
            std::
            
             remove_reference_t
            
           
          
          
           <
          
          T
          
           >
          
          
           &
          
          ,
          
           const
          
          
           
            std::
            
             remove_reference_t
            
           
          
          
           <
          
          U
          
           >
          
          
           &
          
          
           >
          
         
        
        , et, étant donnée une expression
        
         E
        
        et un type
        
         C
        
        , soit
        
         
          CONVERT_TO
          
           <
          
          C
          
           >
          
          
           (
          
          E
          
           )
          
         
        
        défini comme suit :
       
          
  | 
         (jusqu'en C++23) | 
          
  | 
         (depuis C++23) | 
les affirmations suivantes sont vraies :
- bool ( t < u ) == bool ( CONVERT_TO < C > ( t2 ) < CONVERT_TO < C > ( u2 ) )
 - bool ( t > u ) == bool ( CONVERT_TO < C > ( t2 ) > CONVERT_TO < C > ( u2 ) )
 - bool ( t <= u ) == bool ( CONVERT_TO < C > ( t2 ) <= CONVERT_TO < C > ( u2 ) )
 - bool ( t >= u ) == bool ( CONVERT_TO < C > ( t2 ) >= CONVERT_TO < C > ( u2 ) )
 - bool ( u < t ) == bool ( CONVERT_TO < C > ( u2 ) < CONVERT_TO < C > ( t2 ) )
 - bool ( u > t ) == bool ( CONVERT_TO < C > ( u2 ) > CONVERT_TO < C > ( t2 ) )
 - bool ( u <= t ) == bool ( CONVERT_TO < C > ( u2 ) <= CONVERT_TO < C > ( t2 ) )
 - bool ( u >= t ) == bool ( CONVERT_TO < C > ( u2 ) >= CONVERT_TO < C > ( t2 ) )
 
- 
         toute lvalue
         
tde type const std:: remove_reference_t < T > , et - 
         toute lvalue
         
ude type const std:: remove_reference_t < U > , 
les conditions suivantes sont vraies :
- t < u , t <= u , t > u , t >= u , u < t , u <= t , u > t , et u >= t ont le même domaine ;
 - bool ( t < u ) == bool ( u > t ) ;
 - bool ( u < t ) == bool ( t > u ) ;
 - bool ( t <= u ) == bool ( u >= t ) ; et
 - bool ( u <= t ) == bool ( t >= u ) .
 
Préservation de l'égalité
Les expressions déclarées dans les requires expressions des concepts de la bibliothèque standard doivent être equality-preserving (sauf indication contraire).
Variations d'expression implicites
Une requires expression qui utilise une expression non modifiante pour un opérande constant lvalue requiert également les variations d'expression implicites .
Références
- Norme C++23 (ISO/CEI 14882:2024) :
 
- 
         
- 
           18.5.5 Concept
           
totally_ordered[concept.totallyordered] 
 - 
           18.5.5 Concept
           
 
- Norme C++20 (ISO/IEC 14882:2020) :
 
- 
         
- 
           18.5.4 Concept
           
totally_ordered[concept.totallyordered] 
 - 
           18.5.4 Concept
           
 
Voir aussi
| 
         spécifie que l'opérateur
         
          
           
            <=>
           
          
         
         produit un résultat cohérent sur les types donnés
          (concept)  |