Skip to main content

Eq

Trait Eq 

1.6.0 (const: unstable) ยท Source
pub trait Eq: PartialEq<Self> + PointeeSized { }
Expand description

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 == b implies b == a
  • transitive: a == b and b == c implies a == c
  • consistent: a != b if and only if !(a == b)

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:

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 {}

Dyn Compatibilityยง

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementorsยง

Sourceยง

impl Eq for !

1.0.0 (const: unstable) ยท Sourceยง

impl Eq for ()

1.0.0 ยท Sourceยง

impl Eq for AddrParseError

Sourceยง

impl Eq for core::mem::Alignment

1.28.0 ยท Sourceยง

impl Eq for core::fmt::Alignment

Sourceยง

impl Eq for AllocError

Sourceยง

impl Eq for AsciiChar

Sourceยง

impl Eq for Assume

Sourceยง

impl Eq for AtomicOrdering

Sourceยง

impl Eq for ByteStr

1.64.0 ยท Sourceยง

impl Eq for CStr

Sourceยง

impl Eq for CharCase

1.34.0 ยท Sourceยง

impl Eq for CharTryFromError

1.27.0 ยท Sourceยง

impl Eq for CpuidResult

Available on x86 or x86-64 only.
Sourceยง

impl Eq for DebugAsHex

1.9.0 ยท Sourceยง

impl Eq for DecodeUtf16Error

1.3.0 ยท Sourceยง

impl Eq for Duration

1.0.0 ยท Sourceยง

impl Eq for Error

1.0.0 ยท Sourceยง

impl Eq for ErrorKind

Sourceยง

impl Eq for FieldId

Sourceยง

impl Eq for FormattingOptions

1.0.0 ยท Sourceยง

impl Eq for FpCategory

1.69.0 ยท Sourceยง

impl Eq for FromBytesUntilNulError

1.64.0 ยท Sourceยง

impl Eq for FromBytesWithNulError

1.86.0 ยท Sourceยง

impl Eq for GetDisjointMutError

1.34.0 (const: unstable) ยท Sourceยง

impl Eq for Infallible

1.55.0 ยท Sourceยง

impl Eq for IntErrorKind

1.7.0 ยท Sourceยง

impl Eq for IpAddr

1.0.0 (const: unstable) ยท Sourceยง

impl Eq for Ipv4Addr

1.0.0 (const: unstable) ยท Sourceยง

impl Eq for Ipv6Addr

Sourceยง

impl Eq for Ipv6MulticastScope

1.28.0 ยท Sourceยง

impl Eq for Layout

1.50.0 ยท Sourceยง

impl Eq for LayoutError

Sourceยง

impl Eq for Locality

1.10.0 ยท Sourceยง

impl Eq for Location<'_>

1.0.0 (const: unstable) ยท Sourceยง

impl Eq for core::cmp::Ordering

1.0.0 ยท Sourceยง

impl Eq for core::sync::atomic::Ordering

1.0.0 ยท Sourceยง

impl Eq for ParseBoolError

1.20.0 ยท Sourceยง

impl Eq for ParseCharError

1.0.0 ยท Sourceยง

impl Eq for ParseFloatError

1.0.0 ยท Sourceยง

impl Eq for ParseIntError

1.33.0 ยท Sourceยง

impl Eq for PhantomPinned

1.0.0 (const: unstable) ยท Sourceยง

impl Eq for RangeFull

Sourceยง

impl Eq for SearchStep

1.0.0 ยท Sourceยง

impl Eq for SeekFrom

Sourceยง

impl Eq for Sign

Sourceยง

impl Eq for SimdAlign

1.0.0 ยท Sourceยง

impl Eq for SocketAddr

1.0.0 ยท Sourceยง

impl Eq for SocketAddrV4

1.0.0 ยท Sourceยง

impl Eq for SocketAddrV6

1.59.0 ยท Sourceยง

impl Eq for TryFromCharError

1.66.0 ยท Sourceยง

impl Eq for TryFromFloatSecsError

1.34.0 ยท Sourceยง

impl Eq for TryFromIntError

1.0.0 (const: unstable) ยท Sourceยง

impl Eq for TypeId

1.0.0 ยท Sourceยง

impl Eq for Utf8Error

Sourceยง

impl Eq for VariantId

1.0.0 (const: unstable) ยท Sourceยง

impl Eq for bool

1.0.0 (const: unstable) ยท Sourceยง

impl Eq for char

1.0.0 (const: unstable) ยท Sourceยง

impl Eq for i8

1.0.0 (const: unstable) ยท Sourceยง

impl Eq for i16

1.0.0 (const: unstable) ยท Sourceยง

impl Eq for i32

1.0.0 (const: unstable) ยท Sourceยง

impl Eq for i64

1.0.0 (const: unstable) ยท Sourceยง

impl Eq for i128

1.0.0 (const: unstable) ยท Sourceยง

impl Eq for isize

1.0.0 (const: unstable) ยท Sourceยง

impl Eq for str

Sourceยง

impl Eq for svpattern

Available on AArch64 or ARM64EC only.
Sourceยง

impl Eq for svprfop

Available on AArch64 or ARM64EC only.
1.0.0 (const: unstable) ยท Sourceยง

impl Eq for u8

1.0.0 (const: unstable) ยท Sourceยง

impl Eq for u16

1.0.0 (const: unstable) ยท Sourceยง

impl Eq for u32

1.0.0 (const: unstable) ยท Sourceยง

impl Eq for u64

1.0.0 (const: unstable) ยท Sourceยง

impl Eq for u128

1.0.0 (const: unstable) ยท Sourceยง

impl Eq for usize

Sourceยง

impl<'a> Eq for PhantomContravariantLifetime<'a>

Sourceยง

impl<'a> Eq for PhantomCovariantLifetime<'a>

Sourceยง

impl<'a> Eq for PhantomInvariantLifetime<'a>

1.79.0 ยท Sourceยง

impl<'a> Eq for Utf8Chunk<'a>

Sourceยง

impl<'a> Eq for Utf8Pattern<'a>

1.0.0 (const: unstable) ยท Sourceยง

impl<A> Eq for &A
where A: Eq + PointeeSized,

1.0.0 (const: unstable) ยท Sourceยง

impl<A> Eq for &mut A
where A: Eq + PointeeSized,

1.55.0 (const: unstable) ยท Sourceยง

impl<B: Eq, C: Eq> Eq for ControlFlow<B, C>

Sourceยง

impl<Dyn: PointeeSized> Eq for DynMetadata<Dyn>

1.4.0 ยท Sourceยง

impl<F: FnPtr> Eq for F

1.29.0 ยท Sourceยง

impl<H> Eq for BuildHasherDefault<H>

1.0.0 ยท Sourceยง

impl<Idx: Eq> Eq for core::ops::Range<Idx>

1.96.0 (const: unstable) ยท Sourceยง

impl<Idx: Eq> Eq for core::range::Range<Idx>

1.0.0 ยท Sourceยง

impl<Idx: Eq> Eq for core::ops::RangeFrom<Idx>

1.96.0 (const: unstable) ยท Sourceยง

impl<Idx: Eq> Eq for core::range::RangeFrom<Idx>

1.26.0 (const: unstable) ยท Sourceยง

impl<Idx: Eq> Eq for core::ops::RangeInclusive<Idx>

1.95.0 ยท Sourceยง

impl<Idx: Eq> Eq for core::range::RangeInclusive<Idx>

1.0.0 ยท Sourceยง

impl<Idx: Eq> Eq for RangeTo<Idx>

1.26.0 ยท Sourceยง

impl<Idx: Eq> Eq for core::ops::RangeToInclusive<Idx>

1.96.0 ยท Sourceยง

impl<Idx: Eq> Eq for core::range::RangeToInclusive<Idx>

1.41.0 ยท Sourceยง

impl<Ptr: Deref<Target: Eq>> Eq for Pin<Ptr>

Sourceยง

impl<T, const N: usize> Eq for Simd<T, N>
where T: SimdElement + Eq,

1.20.0 ยท Sourceยง

impl<T: ?Sized + Eq> Eq for ManuallyDrop<T>

1.2.0 ยท Sourceยง

impl<T: ?Sized + Eq> Eq for RefCell<T>

Sourceยง

impl<T: ?Sized, const VARIANT: u32, const FIELD: u32> Eq for FieldRepresentingType<T, VARIANT, FIELD>

1.2.0 ยท Sourceยง

impl<T: Eq + Copy> Eq for Cell<T>

Sourceยง

impl<T: Eq + PointeeSized> Eq for TraitImpl<T>

1.0.0 (const: unstable) ยท Sourceยง

impl<T: Eq, E: Eq> Eq for Result<T, E>

1.0.0 (const: unstable) ยท Sourceยง

impl<T: Eq, const N: usize> Eq for [T; N]

1.0.0 (const: unstable) ยท Sourceยง

impl<T: Eq> Eq for (Tโ‚, Tโ‚‚, โ€ฆ, Tโ‚™)

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

1.17.0 (const: unstable) ยท Sourceยง

impl<T: Eq> Eq for Bound<T>

1.0.0 ยท Sourceยง

impl<T: Eq> Eq for Cursor<T>

1.70.0 ยท Sourceยง

impl<T: Eq> Eq for OnceCell<T>

1.0.0 (const: unstable) ยท Sourceยง

impl<T: Eq> Eq for Option<T>

1.36.0 ยท Sourceยง

impl<T: Eq> Eq for Poll<T>

1.19.0 (const: unstable) ยท Sourceยง

impl<T: Eq> Eq for Reverse<T>

1.74.0 ยท Sourceยง

impl<T: Eq> Eq for Saturating<T>

1.0.0 ยท Sourceยง

impl<T: Eq> Eq for Wrapping<T>

1.0.0 (const: unstable) ยท Sourceยง

impl<T: Eq> Eq for [T]

1.0.0 ยท Sourceยง

impl<T: PointeeSized> Eq for *const T

Pointer equality is an equivalence relation.

1.0.0 ยท Sourceยง

impl<T: PointeeSized> Eq for *mut T

Pointer equality is an equivalence relation.

1.25.0 ยท Sourceยง

impl<T: PointeeSized> Eq for NonNull<T>

1.0.0 ยท Sourceยง

impl<T: PointeeSized> Eq for PhantomData<T>

1.21.0 ยท Sourceยง

impl<T> Eq for Discriminant<T>

1.28.0 (const: unstable) ยท Sourceยง

impl<T> Eq for NonZero<T>
where T: ZeroablePrimitive + Eq,

Sourceยง

impl<T> Eq for PhantomContravariant<T>
where T: ?Sized,

Sourceยง

impl<T> Eq for PhantomCovariant<T>
where T: ?Sized,

Sourceยง

impl<T> Eq for PhantomInvariant<T>
where T: ?Sized,

Sourceยง

impl<T> Eq for SyncView<T>
where T: Sync + Eq + ?Sized,

Sourceยง

impl<Y: Eq, R: Eq> Eq for CoroutineState<Y, R>