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<Idx: $crate::cmp::Eq> Eq for RangeInclusive<Idx>impl<T: PointeeSized> Eq for *mut Timpl Eq for FromBytesUntilNulErrorimpl Eq for TryFromIntErrorimpl Eq for TypeIdimpl Eq for CpuidResultimpl<T> Eq for PhantomContravariant<T>impl Eq for Utf8Errorimpl Eq for SimdAlignimpl<T: ?Sized + Eq> Eq for ManuallyDrop<T>impl Eq for i8impl<Idx: ~const $crate::cmp::Eq> Eq for RangeFrom<Idx>impl<F: FnPtr> Eq for Fimpl Eq for IpAddrimpl<T: ~const Eq, N: usize> Eq for [T; N]impl<T, N: usize> Eq for Simd<T, N>impl Eq for Alignmentimpl<T> Eq for PhantomInvariant<T>impl Eq for ParseBoolErrorimpl Eq for i16impl<Idx: $crate::cmp::Eq> Eq for RangeToInclusive<Idx>impl Eq for Orderingimpl Eq for Ipv4Addrimpl<T> Eq for NonZero<T>impl Eq for AsciiCharimpl<T: PointeeSized> Eq for PhantomData<T>impl Eq for strimpl Eq for i32impl<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 Ipv6Addrimpl<T: $crate::cmp::Eq> Eq for Saturating<T>impl Eq for ByteStrimpl Eq for PhantomPinnedimpl<'a> Eq for Utf8Pattern<'a>impl Eq for i64impl Eq for Orderingimpl Eq for IntErrorKindimpl Eq for ()impl Eq for Ipv6MulticastScopeimpl<T: Eq> Eq for OnceCell<T>impl<B: ~const $crate::cmp::Eq, C: ~const $crate::cmp::Eq> Eq for ControlFlow<B, C>impl Eq for AtomicOrderingimpl Eq for SearchStepimpl Eq for i128impl<T> Eq for Exclusive<T>impl Eq for boolimpl Eq for AddrParseErrorimpl<T: Eq + Copy> Eq for Cell<T>impl<Y: $crate::cmp::Eq, R: $crate::cmp::Eq> Eq for CoroutineState<Y, R>impl<'a> Eq for Utf8Chunk<'a>impl Eq for neverimpl Eq for Alignmentimpl Eq for charimpl Eq for SocketAddrimpl<T: ?Sized + Eq> Eq for RefCell<T>impl Eq for RangeFullimpl Eq for Durationimpl<F> Eq for fn(_: T) -> Retimpl<A> Eq for &Aimpl Eq for Errorimpl Eq for usizeimpl Eq for SocketAddrV4impl Eq for ParseCharErrorimpl<Idx: $crate::cmp::Eq> Eq for Range<Idx>impl Eq for TryFromFloatSecsErrorimpl<A> Eq for &mut Aimpl Eq for Signimpl<T: $crate::cmp::Eq> Eq for Wrapping<T>impl<T: $crate::cmp::Eq + PointeeSized> Eq for TraitImpl<T>impl Eq for u8impl Eq for SocketAddrV6impl Eq for CharTryFromErrorimpl<Idx: $crate::cmp::Eq> Eq for RangeFrom<Idx>impl<T: $crate::cmp::Eq> Eq for Poll<T>impl Eq for FpCategoryimpl Eq for Infallibleimpl Eq for DebugAsHeximpl Eq for u16impl<T: ~const $crate::cmp::Eq> Eq for Option<T>impl Eq for DecodeUtf16Errorimpl<T> Eq for Discriminant<T>impl<Idx: $crate::cmp::Eq> Eq for RangeTo<Idx>impl Eq for Layoutimpl<'a> Eq for PhantomCovariantLifetime<'a>impl Eq for FormattingOptionsimpl Eq for u32impl Eq for Location<'_>impl Eq for TryFromCharErrorimpl<Idx: ~const $crate::cmp::Eq> Eq for RangeInclusive<Idx>impl Eq for LayoutErrorimpl<'a> Eq for PhantomContravariantLifetime<'a>impl<H> Eq for BuildHasherDefault<H>impl Eq for u64impl<Ptr: Deref<Target: Eq>> Eq for Pin<Ptr>impl Eq for CStrimpl<Idx: $crate::cmp::Eq> Eq for RangeToInclusive<Idx>impl<T: PointeeSized> Eq for NonNull<T>impl Eq for AllocErrorimpl Eq for Assumeimpl<'a> Eq for PhantomInvariantLifetime<'a>impl<T: ~const Eq> Eq for [T]impl Eq for u128impl<Idx: ~const $crate::cmp::Eq> Eq for Range<Idx>impl<T: PointeeSized> Eq for *const Timpl Eq for FromBytesWithNulErrorimpl<T: ~const $crate::cmp::Eq> Eq for Bound<T>impl<T: ~const Eq> Eq for (T)impl Eq for ParseIntErrorimpl<Dyn: PointeeSized> Eq for DynMetadata<Dyn>impl<T> Eq for PhantomCovariant<T>impl Eq for GetDisjointMutErrorimpl Eq for Localityimpl Eq for isize