@@ -397,6 +397,12 @@ pub enum Ordering {
397397} 
398398
399399impl  Ordering  { 
400+     #[ inline]  
401+     const  fn  as_raw ( self )  -> i8  { 
402+         // FIXME(const-hack): just use `PartialOrd` against `Equal` once that's const 
403+         crate :: intrinsics:: discriminant_value ( & self ) 
404+     } 
405+ 
400406    /// Returns `true` if the ordering is the `Equal` variant. 
401407/// 
402408/// # Examples 
@@ -413,7 +419,11 @@ impl Ordering {
413419    #[ rustc_const_stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
414420    #[ stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
415421    pub  const  fn  is_eq ( self )  -> bool  { 
416-         matches ! ( self ,  Equal ) 
422+         // All the `is_*` methods are implemented as comparisons against zero 
423+         // to follow how clang's libcxx implements their equivalents in 
424+         // <https://github.com/llvm/llvm-project/blob/60486292b79885b7800b082754153202bef5b1f0/libcxx/include/__compare/is_eq.h#L23-L28> 
425+ 
426+         self . as_raw ( )  == 0 
417427    } 
418428
419429    /// Returns `true` if the ordering is not the `Equal` variant. 
@@ -432,7 +442,7 @@ impl Ordering {
432442    #[ rustc_const_stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
433443    #[ stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
434444    pub  const  fn  is_ne ( self )  -> bool  { 
435-         ! matches ! ( self ,   Equal ) 
445+         self . as_raw ( )  !=  0 
436446    } 
437447
438448    /// Returns `true` if the ordering is the `Less` variant. 
@@ -451,7 +461,7 @@ impl Ordering {
451461    #[ rustc_const_stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
452462    #[ stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
453463    pub  const  fn  is_lt ( self )  -> bool  { 
454-         matches ! ( self ,   Less ) 
464+         self . as_raw ( )  <  0 
455465    } 
456466
457467    /// Returns `true` if the ordering is the `Greater` variant. 
@@ -470,7 +480,7 @@ impl Ordering {
470480    #[ rustc_const_stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
471481    #[ stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
472482    pub  const  fn  is_gt ( self )  -> bool  { 
473-         matches ! ( self ,   Greater ) 
483+         self . as_raw ( )  >  0 
474484    } 
475485
476486    /// Returns `true` if the ordering is either the `Less` or `Equal` variant. 
@@ -489,7 +499,7 @@ impl Ordering {
489499    #[ rustc_const_stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
490500    #[ stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
491501    pub  const  fn  is_le ( self )  -> bool  { 
492-         ! matches ! ( self ,   Greater ) 
502+         self . as_raw ( )  <=  0 
493503    } 
494504
495505    /// Returns `true` if the ordering is either the `Greater` or `Equal` variant. 
@@ -508,7 +518,7 @@ impl Ordering {
508518    #[ rustc_const_stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
509519    #[ stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
510520    pub  const  fn  is_ge ( self )  -> bool  { 
511-         ! matches ! ( self ,   Less ) 
521+         self . as_raw ( )  >=  0 
512522    } 
513523
514524    /// Reverses the `Ordering`. 
0 commit comments