std:: partial_order
| 
           Defined in header
            
            
             <compare>
            
            | ||
| 
           
            
             inline
            
            
             namespace
            
            
             /* unspecified */
            
            
             {
            
             
             
              inline
             
             
              constexpr
             
             
              /* unspecified */
             
             partial_order
             
              =
             
             
              /* unspecified */
             
             
              ;
             
              | (since C++20) | |
| 
           Call signature
           | ||
| 
           
            
             template
            
            
             <
            
            
             class
            
            T,
            
             class
            
            U
            
             >
            
             
             requires
             
              /* see below */
             
              | ||
       Compares two values using 3-way comparison and produces a result of type
       
        
         std::partial_ordering
        
       
       .
      
       Let
       
        
         t
        
       
       and
       
        
         u
        
       
       be expressions and
       
        T
       
       and
       
        U
       
       denote
       
        decltype
        
         (
        
        
         (
        
        t
        
         )
        
        
         )
        
       
       and
       
        decltype
        
         (
        
        
         (
        
        u
        
         )
        
        
         )
        
       
       respectively,
       
        
         std
         
          ::
         
         
          partial_order
         
         
          (
         
         t, u
         
          )
         
        
       
       is
       
        expression-equivalent
       
       to:
      
- 
        If
        
         
          
           
            std::
            
             is_same_v
            
           
          
          
           <
          
          
           
            std::
            
             decay_t
            
           
          
          
           <
          
          T
          
           >
          
          ,
          
           
            std::
            
             decay_t
            
           
          
          
           <
          
          U
          
           >>
          
         
        
        is
        
         
          
           true
          
         
        
        :
        - 
          
           
            
             
              std::
              
               partial_ordering
              
             
            
            
             (
            
            partial_order
            
             (
            
            t, u
            
             )
            
            
             )
            
           
          
          , if it is a well-formed expression with overload resolution performed in a context that does not include a declaration of
          std::partial_order,
- otherwise, std:: partial_ordering ( std:: compare_three_way ( ) ( t, u ) ) , if it is well-formed,
- otherwise, std:: partial_ordering ( std:: weak_order ( t, u ) ) , if it is well-formed.
 
- 
          
           
            
             
              std::
              
               partial_ordering
              
             
            
            
             (
            
            partial_order
            
             (
            
            t, u
            
             )
            
            
             )
            
           
          
          , if it is a well-formed expression with overload resolution performed in a context that does not include a declaration of
          
- In all other cases, the expression is ill-formed, which can result in substitution failure when it appears in the immediate context of a template instantiation.
Customization point objects
       The name
       
        std::partial_order
       
       denotes a
       
        customization point object
       
       , which is a const
       
        function object
       
       of a
       
        literal
       
       
        
         semiregular
        
       
       class type. For exposition purposes, the cv-unqualified version of its type is denoted as
       
        
         __partial_order_fn
        
       
       .
      
       All instances of
       
        
         __partial_order_fn
        
       
       are equal. The effects of invoking different instances of type
       
        
         __partial_order_fn
        
       
       on the same arguments are equivalent, regardless of whether the expression denoting the instance is an lvalue or rvalue, and is const-qualified or not (however, a volatile-qualified instance is not required to be invocable). Thus,
       
        std::partial_order
       
       can be copied freely and its copies can be used interchangeably.
      
       Given a set of types
       
        Args...
       
       , if
       
        
         
          
           std::
           
            declval
           
          
         
         
          <
         
         Args
         
          >
         
         
          (
         
         
          )
         
         ...
        
       
       meet the requirements for arguments to
       
        std::partial_order
       
       above,
       
        
         __partial_order_fn
        
       
       models
       
      
- std:: invocable < __partial_order_fn, Args... > ,
- std:: invocable < const __partial_order_fn, Args... > ,
- std:: invocable < __partial_order_fn & , Args... > , and
- 
        
         
          
           
            std::
            
             invocable
            
           
          
          
           <
          
          
           const
          
          __partial_order_fn
          
           &
          
          , Args...
          
           >
          
         
        
        .
        
 
       Otherwise, no function call operator of
       
        
         __partial_order_fn
        
       
       participates in overload resolution.
      
Example
| This section is incomplete Reason: no example | 
See also
| 
           
            
             
              (C++20)
             
            
           
           | the result type of 3-way comparison that supports all 6 operators, is not substitutable, and allows incomparable values (class) | 
| 
           
            
             
              (C++20)
             
            
           
           | performs 3-way comparison and produces a result of type 
          std::strong_ordering
         (customization point object) | 
| 
           
            
             
              (C++20)
             
            
           
           | performs 3-way comparison and produces a result of type 
          std::weak_ordering
         (customization point object) | 
| 
           
            
             
              (C++20)
             
            
           
           | performs 3-way comparison and produces a result of type 
          std::partial_ordering
         , even if
         
          
           operator
           
            <=>
           
          
         
         is unavailable(customization point object) |