rust / latest / std / cmp / trait.eq.html

Trait std::cmp::Eq

pub trait Eq: PartialEq { }

Trait for comparisons corresponding to equivalence relations.

This means, that in addition to a == b and a != b being strict inverses, the relation must be (for all a, b and c):

  • reflexive: a == a;
  • symmetric: a == b implies b == a (required by PartialEq as well); and
  • transitive: a == b and b == c implies a == c (required by PartialEq as well).

This property cannot be checked by the compiler, and therefore Eq implies PartialEq, and has no extra methods.

Violating this property is a logic error. The behavior resulting from a logic error is not specified, but users of the trait must ensure that such logic errors do not result in undefined behavior. This means that unsafe code must not rely on the correctness of these methods.

Implement Eq in addition to PartialEq if it’s guaranteed that PartialEq::eq(a, a) always returns true (reflexivity), in addition to the symmetric and transitive properties already required by PartialEq.

Derivable

This trait can be used with #[derive]. When derived, because Eq has no extra methods, it is only informing the compiler that this is an equivalence relation rather than a partial equivalence relation. Note that the derive strategy requires all fields are Eq, which isn’t always desired.

How can I implement Eq?

If you cannot use the derive strategy, specify that your type implements Eq, which has no methods:

enum BookFormat { Paperback, Hardback, Ebook }
struct Book {
    isbn: i32,
    format: BookFormat,
}
impl PartialEq for Book {
    fn eq(&self, other: &Self) -> bool {
        self.isbn == other.isbn
    }
}
impl Eq for Book {}

Object Safety

This trait is not object safe.

Implementors

source
impl Eq for AsciiChar
1.65.0source
impl Eq for BacktraceStatus
source
impl Eq for TryReserveErrorKind
1.34.0source
impl Eq for Infallible
source
impl Eq for VarError
1.28.0source
impl Eq for std::fmt::Alignment
source
impl Eq for ErrorKind
source
impl Eq for SeekFrom
1.7.0source
impl Eq for IpAddr
source
impl Eq for Ipv6MulticastScope
source
impl Eq for Shutdown
source
impl Eq for SocketAddr
source
impl Eq for FpCategory
1.55.0source
impl Eq for IntErrorKind
source
impl Eq for BacktraceStyle
source
impl Eq for Which
source
impl Eq for SearchStep
source
impl Eq for std::sync::atomic::Ordering
1.12.0source
impl Eq for RecvTimeoutError
source
impl Eq for TryRecvError
source
impl Eq for std::cmp::Ordering
source
impl Eq for bool
source
impl Eq for char
source
impl Eq for i8
source
impl Eq for i16
source
impl Eq for i32
source
impl Eq for i64
source
impl Eq for i128
source
impl Eq for isize
source
impl Eq for !
source
impl Eq for str
source
impl Eq for u8
source
impl Eq for u16
source
impl Eq for u32
source
impl Eq for u64
source
impl Eq for u128
source
impl Eq for ()
source
impl Eq for usize
1.27.0source
impl Eq for CpuidResult
source
impl Eq for AllocError
1.28.0source
impl Eq for Layout
1.50.0source
impl Eq for LayoutError
source
impl Eq for TypeId
1.34.0source
impl Eq for CharTryFromError
1.9.0source
impl Eq for DecodeUtf16Error
1.20.0source
impl Eq for ParseCharError
1.59.0source
impl Eq for TryFromCharError
1.57.0source
impl Eq for TryReserveError
source
impl Eq for CStr
1.64.0source
impl Eq for CString
1.69.0source
impl Eq for FromBytesUntilNulError
1.64.0source
impl Eq for FromBytesWithNulError
1.64.0source
impl Eq for FromVecWithNulError
1.64.0source
impl Eq for IntoStringError
1.64.0source
impl Eq for NulError
source
impl Eq for OsStr
source
impl Eq for OsString
source
impl Eq for Error
1.1.0source
impl Eq for FileType
source
impl Eq for Permissions
1.33.0source
impl Eq for PhantomPinned
source
impl Eq for Assume
source
impl Eq for AddrParseError
source
impl Eq for Ipv4Addr
source
impl Eq for Ipv6Addr
source
impl Eq for SocketAddrV4
source
impl Eq for SocketAddrV6
1.34.0source
impl Eq for NonZeroI8
1.34.0source
impl Eq for NonZeroI16
1.34.0source
impl Eq for NonZeroI32
1.34.0source
impl Eq for NonZeroI64
1.34.0source
impl Eq for NonZeroI128
1.34.0source
impl Eq for NonZeroIsize
1.28.0source
impl Eq for NonZeroU8
1.28.0source
impl Eq for NonZeroU16
1.28.0source
impl Eq for NonZeroU32
1.28.0source
impl Eq for NonZeroU64
1.28.0source
impl Eq for NonZeroU128
1.28.0source
impl Eq for NonZeroUsize
source
impl Eq for ParseFloatError
source
impl Eq for ParseIntError
1.34.0source
impl Eq for TryFromIntError
source
impl Eq for RangeFull
source
impl Eq for UCredAvailable on Unix only.
1.63.0source
impl Eq for InvalidHandleErrorAvailable on Windows only.
1.63.0source
impl Eq for NullHandleErrorAvailable on Windows only.
source
impl Eq for Components<'_>
source
impl Eq for Path
source
impl Eq for PathBuf
1.7.0source
impl Eq for StripPrefixError
source
impl Eq for ExitStatus
source
impl Eq for ExitStatusError
source
impl Eq for Output
source
impl Eq for std::ptr::Alignment
source
impl Eq for ParseBoolError
source
impl Eq for Utf8Error
source
impl Eq for FromUtf8Error
source
impl Eq for String
source
impl Eq for RecvError
1.5.0source
impl Eq for WaitTimeoutResult
1.26.0source
impl Eq for AccessError
1.19.0source
impl Eq for ThreadId
1.3.0source
impl Eq for Duration
1.8.0source
impl Eq for Instant
1.8.0source
impl Eq for SystemTime
1.66.0source
impl Eq for TryFromFloatSecsError
source
impl<'a> Eq for Component<'a>
source
impl<'a> Eq for Prefix<'a>
1.10.0source
impl<'a> Eq for Location<'a>
source
impl<'a> Eq for PrefixComponent<'a>
source
impl<'a> Eq for Utf8Chunk<'a>
source
impl<A> Eq for &A
where
    A: Eq + ?Sized,
source
impl<A> Eq for &mut A
where
    A: Eq + ?Sized,
source
impl<B> Eq for Cow<'_, B>
where
    B: Eq + ToOwned + ?Sized,
1.55.0source
impl<B, C> Eq for ControlFlow<B, C>
where
    B: Eq,
    C: Eq,
source
impl<Dyn> Eq for DynMetadata<Dyn>
where
    Dyn: ?Sized,
1.4.0source
impl<F> Eq for F
where
    F: FnPtr,
1.29.0source
impl<H> Eq for BuildHasherDefault<H>
source
impl<Idx> Eq for Range<Idx>
where
    Idx: Eq,
source
impl<Idx> Eq for RangeFrom<Idx>
where
    Idx: Eq,
1.26.0source
impl<Idx> Eq for RangeInclusive<Idx>
where
    Idx: Eq,
source
impl<Idx> Eq for RangeTo<Idx>
where
    Idx: Eq,
1.26.0source
impl<Idx> Eq for RangeToInclusive<Idx>
where
    Idx: Eq,
source
impl<K, V, A> Eq for BTreeMap<K, V, A>
where
    K: Eq,
    V: Eq,
    A: Allocator + Clone,
source
impl<K, V, S> Eq for HashMap<K, V, S>
where
    K: Eq + Hash,
    V: Eq,
    S: BuildHasher,
1.41.0source
impl<P> Eq for Pin<P>
where
    P: Deref,
    <P as Deref>::Target: Eq,
1.17.0source
impl<T> Eq for Bound<T>
where
    T: Eq,
source
impl<T> Eq for Option<T>
where
    T: Eq,
1.36.0source
impl<T> Eq for Poll<T>
where
    T: Eq,
source
impl<T> Eq for *const T
where
    T: ?Sized,
source
impl<T> Eq for *mut T
where
    T: ?Sized,
source
impl<T> Eq for [T]
where
    T: Eq,
source
impl<T> Eq for (T₁, T₂, …, Tₙ)
where
    T: Eq + ?Sized,

This trait is implemented for tuples up to twelve items long.

1.2.0source
impl<T> Eq for Cell<T>
where
    T: Eq + Copy,
1.70.0source
impl<T> Eq for OnceCell<T>
where
    T: Eq,
1.2.0source
impl<T> Eq for RefCell<T>
where
    T: Eq + ?Sized,
source
impl<T> Eq for PhantomData<T>
where
    T: ?Sized,
1.21.0source
impl<T> Eq for Discriminant<T>
1.20.0source
impl<T> Eq for ManuallyDrop<T>
where
    T: Eq + ?Sized,
1.74.0source
impl<T> Eq for Saturating<T>
where
    T: Eq,
source
impl<T> Eq for Wrapping<T>
where
    T: Eq,
1.25.0source
impl<T> Eq for NonNull<T>
where
    T: ?Sized,
1.19.0source
impl<T> Eq for Reverse<T>
where
    T: Eq,
source
impl<T, A> Eq for Box<T, A>
where
    T: Eq + ?Sized,
    A: Allocator,
source
impl<T, A> Eq for BTreeSet<T, A>
where
    T: Eq,
    A: Allocator + Clone,
source
impl<T, A> Eq for LinkedList<T, A>
where
    T: Eq,
    A: Allocator,
source
impl<T, A> Eq for VecDeque<T, A>
where
    T: Eq,
    A: Allocator,
source
impl<T, A> Eq for Rc<T, A>
where
    T: Eq + ?Sized,
    A: Allocator,
source
impl<T, A> Eq for Arc<T, A>
where
    T: Eq + ?Sized,
    A: Allocator,
source
impl<T, A> Eq for Vec<T, A>
where
    T: Eq,
    A: Allocator,
source
impl<T, E> Eq for Result<T, E>
where
    T: Eq,
    E: Eq,
source
impl<T, S> Eq for HashSet<T, S>
where
    T: Eq + Hash,
    S: BuildHasher,
source
impl<T, const N: usize> Eq for [T; N]
where
    T: Eq,
source
impl<T, const N: usize> Eq for Simd<T, N>
where
    LaneCount<N>: SupportedLaneCount,
    T: SimdElement + Eq,
source
impl<T: Eq> Eq for TrySendError<T>
source
impl<T: Eq> Eq for Cursor<T>
source
impl<T: Eq> Eq for SendError<T>
1.70.0source
impl<T: Eq> Eq for OnceLock<T>
source
impl<Y, R> Eq for CoroutineState<Y, R>
where
    Y: Eq,
    R: Eq,

© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/std/cmp/trait.Eq.html