// This test is illustrating the difference between how failing to derive // `PartialEq` is handled compared to failing to implement it at all. // See also RFC 1445 #[derive(PartialEq, Eq)] struct Structural(u32); struct NoPartialEq(u32); struct NoDerive(u32); // This impl makes NoDerive irreflexive. impl PartialEq for NoDerive { fn eq(&self, _: &Self) -> bool { false } } impl Eq for NoDerive { } const NO_DERIVE_NONE: Option = None; const NO_PARTIAL_EQ_NONE: Option = None; fn main() { match None { NO_DERIVE_NONE => println!("NO_DERIVE_NONE"), _ => panic!("whoops"), } match None { NO_PARTIAL_EQ_NONE => println!("NO_PARTIAL_EQ_NONE"), //~^ ERROR must be annotated with `#[derive(PartialEq, Eq)]` _ => panic!("whoops"), } }