From f6db0ef9464a17fa6e547e755b1b5dfa09af9499 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Sun, 23 Mar 2014 22:54:42 +1100 Subject: std: remove the `equals` method from `TotalEq`. `TotalEq` is now just an assertion about the `Eq` impl of a type (i.e. `==` is a total equality if a type implements `TotalEq`) so the extra method is just confusing. Also, a new method magically appeared as a hack to allow deriving to assert that the contents of a struct/enum are also TotalEq, because the deriving infrastructure makes it very hard to do anything but create a trait method. (You didn't hear about this horrible work-around from me :(.) --- src/libstd/cmp.rs | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) (limited to 'src/libstd/cmp.rs') diff --git a/src/libstd/cmp.rs b/src/libstd/cmp.rs index 5130da44ed5..e956a1cdf1d 100644 --- a/src/libstd/cmp.rs +++ b/src/libstd/cmp.rs @@ -42,6 +42,21 @@ pub trait Eq { } /// Trait for equality comparisons where `a == b` and `a != b` are strict inverses. +#[cfg(not(stage0))] +pub trait TotalEq: Eq { + // FIXME #13101: this method is used solely by #[deriving] to + // assert that every component of a type implements #[deriving] + // itself, the current deriving infrastructure means doing this + // assertion without using a method on this trait is nearly + // impossible. + // + // This should never be implemented by hand. + #[doc(hidden)] + #[inline(always)] + fn assert_receiver_is_total_eq(&self) {} +} + +#[cfg(stage0)] pub trait TotalEq: Eq { /// This method must return the same value as `eq`. It exists to prevent /// deriving `TotalEq` from fields not implementing the `TotalEq` trait. @@ -52,10 +67,7 @@ pub trait TotalEq: Eq { macro_rules! totaleq_impl( ($t:ty) => { - impl TotalEq for $t { - #[inline] - fn equals(&self, other: &$t) -> bool { *self == *other } - } + impl TotalEq for $t {} } ) @@ -84,12 +96,7 @@ pub trait TotalOrd: TotalEq + Ord { fn cmp(&self, other: &Self) -> Ordering; } -impl TotalEq for Ordering { - #[inline] - fn equals(&self, other: &Ordering) -> bool { - *self == *other - } -} +impl TotalEq for Ordering {} impl TotalOrd for Ordering { #[inline] fn cmp(&self, other: &Ordering) -> Ordering { @@ -194,12 +201,6 @@ mod test { assert_eq!(12.cmp(-5), Greater); } - #[test] - fn test_int_totaleq() { - assert!(5.equals(&5)); - assert!(!2.equals(&17)); - } - #[test] fn test_ordering_order() { assert!(Less < Equal); -- cgit 1.4.1-3-g733a5