# Trait core::cmp::Eq

1.0.0 · source · [−]

    pub trait Eq: PartialEq<Self> { }

Expand description

Trait for equality comparisons which are equivalence relations.

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

- reflexive: `a == a`;
- symmetric: `a == b` implies `b == a`; and
- transitive: `a == b` and `b == c` implies `a == c`.

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

### Derivable

This trait can be used with `#[derive]`. When `derive`d, 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 {}

Run

## Implementors

1.34.0 · source

### impl Eq for Infallible

1.28.0 · source

### impl Eq for core::fmt::Alignment

source

### impl Eq for FpCategory

1.55.0 · source

### impl Eq for IntErrorKind

source

### impl Eq for Which

source

### impl Eq for SearchStep

source

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

source

### impl Eq for core::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

source

### impl Eq for AllocError

1.28.0 · source

### impl Eq for Layout

1.50.0 · source

### impl Eq for LayoutError

source

### impl Eq for TypeId

1.27.0 · source

### impl Eq for CpuidResult

Available on x86 or x86-64 only.
1.34.0 · source

### impl Eq for CharTryFromError

1.9.0 · source

### impl Eq for DecodeUtf16Error

1.20.0 · source

### impl Eq for ParseCharError

1.59.0 · source

### impl Eq for TryFromCharError

source

### impl Eq for CStr

source

### impl Eq for FromBytesUntilNulError

1.64.0 · source

### impl Eq for FromBytesWithNulError

source

### impl Eq for Error

1.33.0 · source

### impl Eq for PhantomPinned

source

### impl Eq for Assume

1.34.0 · source

### impl Eq for NonZeroI8

1.34.0 · source

### impl Eq for NonZeroI16

1.34.0 · source

### impl Eq for NonZeroI32

1.34.0 · source

### impl Eq for NonZeroI64

1.34.0 · source

### impl Eq for NonZeroI128

1.34.0 · source

### impl Eq for NonZeroIsize

1.28.0 · source

### impl Eq for NonZeroU8

1.28.0 · source

### impl Eq for NonZeroU16

1.28.0 · source

### impl Eq for NonZeroU32

1.28.0 · source

### impl Eq for NonZeroU64

1.28.0 · source

### impl Eq for NonZeroU128

1.28.0 · source

### impl Eq for NonZeroUsize

source

### impl Eq for ParseFloatError

source

### impl Eq for ParseIntError

1.34.0 · source

### impl Eq for TryFromIntError

source

### impl Eq for RangeFull

source

### impl Eq for core::ptr::Alignment

source

### impl Eq for ParseBoolError

source

### impl Eq for Utf8Error

1.3.0 · source

### impl Eq for Duration

1.66.0 · source

### impl Eq for TryFromFloatSecsError

1.10.0 · source

### impl<'a> Eq for Location<'a>

source

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

source

### impl<A: ?Sized> Eq for &Awhere
A: Eq,

source

### impl<A: ?Sized> Eq for &mut Awhere
A: Eq,

source

### impl<Dyn: ?Sized> Eq for DynMetadata<Dyn>

1.29.0 · source

### impl<H> Eq for BuildHasherDefault<H>

source

### impl<Idx: Eq> Eq for Range<Idx>

source

### impl<Idx: Eq> Eq for RangeFrom<Idx>

1.26.0 · source

### impl<Idx: Eq> Eq for RangeInclusive<Idx>

source

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

1.26.0 · source

### impl<Idx: Eq> Eq for RangeToInclusive<Idx>

1.41.0 · source

### impl<P: Deref<Target: Eq>> Eq for Pin<P>

1.4.0 · source

### impl<Ret, T> Eq for fn (T₁, T₂, …, Tₙ) -> Ret

This trait is implemented for function pointers with up to twelve arguments.

1.4.0 · source

### impl<Ret, T> Eq for extern "C" fn (T₁, T₂, …, Tₙ) -> Ret

This trait is implemented for function pointers with up to twelve arguments.

1.4.0 · source

### impl<Ret, T> Eq for extern "C" fn (T₁, T₂, …, Tₙ, ...) -> Ret

This trait is implemented for function pointers with up to twelve arguments.

source

### impl<Ret, T> Eq for extern "C-unwind" fn (T₁, T₂, …, Tₙ) -> Ret

This trait is implemented for function pointers with up to twelve arguments.

source

### impl<Ret, T> Eq for extern "C-unwind" fn (T₁, T₂, …, Tₙ, ...) -> Ret

This trait is implemented for function pointers with up to twelve arguments.

1.4.0 · source

### impl<Ret, T> Eq for unsafe fn (T₁, T₂, …, Tₙ) -> Ret

This trait is implemented for function pointers with up to twelve arguments.

1.4.0 · source

### impl<Ret, T> Eq for unsafe extern "C" fn (T₁, T₂, …, Tₙ) -> Ret

This trait is implemented for function pointers with up to twelve arguments.

1.4.0 · source

### impl<Ret, T> Eq for unsafe extern "C" fn (T₁, T₂, …, Tₙ, ...) -> Ret

This trait is implemented for function pointers with up to twelve arguments.

source

### impl<Ret, T> Eq for unsafe extern "C-unwind" fn (T₁, T₂, …, Tₙ) -> Ret

This trait is implemented for function pointers with up to twelve arguments.

source

### impl<Ret, T> Eq for unsafe extern "C-unwind" fn (T₁, T₂, …, Tₙ, ...) -> Ret

This trait is implemented for function pointers with up to twelve arguments.

1.21.0 · source

### impl<T> Eq for Discriminant<T>

source

### impl<T, const LANES: usize> Eq for Simd<T, LANES>where
LaneCount<LANES>: SupportedLaneCount,
T: SimdElement + Eq,

1.2.0 · source

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

1.20.0 · source

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

1.17.0 · source

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

source

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

1.36.0 · source

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

source

### impl<T: Eq> Eq for [T]

source

### impl<T: Eq> Eq for (T₁, T₂, …, Tₙ)where
T: ?Sized,

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

source

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

source

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

source

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

1.19.0 · source

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

source

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

source

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

1.2.0 · source

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

source

### impl<T: ?Sized> Eq for *const T

source

### impl<T: ?Sized> Eq for *mut T

source

### impl<T: ?Sized> Eq for PhantomData<T>

1.25.0 · source

### impl<T: ?Sized> Eq for NonNull<T>

source

### impl<Y: Eq, R: Eq> Eq for GeneratorState<Y, R>