Trait Eq
trait Eq: ~const PartialEq<Self> + PointeeSized
Trait for comparisons corresponding to equivalence relations.
The primary difference to PartialEq is the additional requirement for reflexivity. A type
that implements PartialEq guarantees that for all a, b and c:
- symmetric:
a == bimpliesb == aanda != bimplies!(a == b) - transitive:
a == bandb == cimpliesa == c
Eq, which builds on top of PartialEq also implies:
- reflexive:
a == a
This property cannot be checked by the compiler, and therefore Eq is a trait without 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.
Floating point types such as f32 and f64 implement only PartialEq but not Eq
because NaN != NaN.
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
extra methods:
Implementors
impl Eq for IpAddrimpl Eq for SocketAddrV4impl Eq for Alignmentimpl<Idx: $crate::cmp::Eq> Eq for RangeInclusive<Idx>impl<T: PointeeSized> Eq for *mut Timpl Eq for Alignmentimpl Eq for charimpl<T: ~const Eq> Eq for [T]impl Eq for u128impl Eq for SearchStepimpl Eq for i128impl Eq for LayoutErrorimpl<'a> Eq for PhantomContravariantLifetime<'a>impl Eq for PhantomPinnedimpl<Idx: $crate::cmp::Eq> Eq for RangeTo<Idx>impl Eq for AsciiCharimpl Eq for CharTryFromErrorimpl Eq for FromBytesUntilNulErrorimpl Eq for SimdAlignimpl Eq for SocketAddrimpl<Idx: ~const $crate::cmp::Eq> Eq for Range<Idx>impl<T: PointeeSized> Eq for *const Timpl<T> Eq for Exclusive<T>impl Eq for boolimpl<H> Eq for BuildHasherDefault<H>impl Eq for u64impl<'a> Eq for Utf8Pattern<'a>impl<T> Eq for Discriminant<T>impl Eq for i64impl Eq for Layoutimpl<'a> Eq for PhantomCovariantLifetime<'a>impl<T: PointeeSized> Eq for PhantomData<T>impl<Idx: $crate::cmp::Eq> Eq for RangeFrom<Idx>impl Eq for TryFromIntErrorimpl Eq for Assumeimpl<T: ~const Eq, N: usize> Eq for [T; N]impl Eq for ParseCharErrorimpl Eq for FromBytesWithNulErrorimpl Eq for AddrParseErrorimpl<Ptr: Deref<Target: Eq>> Eq for Pin<Ptr>impl Eq for Localityimpl Eq for Orderingimpl Eq for ()impl Eq for FormattingOptionsimpl Eq for u32impl Eq for strimpl Eq for i32impl<T: $crate::cmp::Eq> Eq for Poll<T>impl<T: $crate::cmp::Eq> Eq for Saturating<T>impl Eq for Infallibleimpl<T, N: usize> Eq for Simd<T, N>impl<T> Eq for PhantomInvariant<T>impl<Idx: $crate::cmp::Eq> Eq for Range<Idx>impl Eq for TypeIdimpl<T: ?Sized + Eq> Eq for RefCell<T>impl Eq for CStrimpl Eq for Ipv6MulticastScopeimpl Eq for Location<'_>impl Eq for ParseFloatErrorimpl<T: ~const $crate::cmp::Eq, E: ~const $crate::cmp::Eq> Eq for Result<T, E>impl<T: ~const $crate::cmp::Eq> Eq for Reverse<T>impl Eq for DebugAsHeximpl Eq for u16impl Eq for ParseBoolErrorimpl<T: $crate::cmp::Eq> Eq for Wrapping<T>impl Eq for i16impl Eq for TryFromFloatSecsErrorimpl<A> Eq for &mut Aimpl Eq for CpuidResultimpl Eq for FpCategoryimpl<T> Eq for PhantomContravariant<T>impl Eq for RangeFullimpl Eq for IntErrorKindimpl<T: ~const $crate::cmp::Eq> Eq for Bound<T>impl<T: Eq + Copy> Eq for Cell<T>impl Eq for CharCaseimpl<T: ?Sized + Eq> Eq for ManuallyDrop<T>impl<T: $crate::cmp::Eq + PointeeSized> Eq for TraitImpl<T>impl Eq for AtomicOrderingimpl Eq for Ipv6Addrimpl<T: ~const $crate::cmp::Eq> Eq for Option<T>impl<Idx: $crate::cmp::Eq> Eq for RangeToInclusive<Idx>impl Eq for Orderingimpl Eq for Signimpl Eq for ParseIntErrorimpl Eq for u8impl Eq for Utf8Errorimpl Eq for i8impl Eq for Durationimpl<A> Eq for &Aimpl<T: ~const Eq> Eq for (T)impl<T> Eq for PhantomCovariant<T>impl<T: PointeeSized> Eq for NonNull<T>impl<Y: $crate::cmp::Eq, R: $crate::cmp::Eq> Eq for CoroutineState<Y, R>impl<Idx: $crate::cmp::Eq> Eq for RangeToInclusive<Idx>impl<T: Eq> Eq for OnceCell<T>impl Eq for TryFromCharErrorimpl Eq for Ipv4Addrimpl<T> Eq for NonZero<T>impl<Dyn: PointeeSized> Eq for DynMetadata<Dyn>impl Eq for SocketAddrV6impl<Idx: ~const $crate::cmp::Eq> Eq for RangeFrom<Idx>impl<F: FnPtr> Eq for Fimpl Eq for Errorimpl Eq for usizeimpl Eq for GetDisjointMutErrorimpl Eq for isizeimpl<'a> Eq for Utf8Chunk<'a>impl Eq for neverimpl Eq for AllocErrorimpl<'a> Eq for PhantomInvariantLifetime<'a>impl<F> Eq for fn(_: T) -> Retimpl<B: ~const $crate::cmp::Eq, C: ~const $crate::cmp::Eq> Eq for ControlFlow<B, C>impl<Idx: ~const $crate::cmp::Eq> Eq for RangeInclusive<Idx>impl Eq for ByteStrimpl Eq for DecodeUtf16Error