@@ -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