# Static rustc_lint::builtin::CONST_PATTERNS_WITHOUT_PARTIAL_EQ

source ·

    pub static CONST_PATTERNS_WITHOUT_PARTIAL_EQ: &'static Lint

Expand description

The `const_patterns_without_partial_eq` lint detects constants that are used in patterns, whose type does not implement `PartialEq`.

#### Example

ⓘ

    #![deny(const_patterns_without_partial_eq)]

    trait EnumSetType {
       type Repr;
    }

    enum Enum8 { }
    impl EnumSetType for Enum8 {
        type Repr = u8;
    }

    #[derive(PartialEq, Eq)]
    struct EnumSet<T: EnumSetType> {
        __enumset_underlying: T::Repr,
    }

    const CONST_SET: EnumSet<Enum8> = EnumSet { __enumset_underlying: 3 };

    fn main() {
        match CONST_SET {
            CONST_SET => { /* ok */ }
            _ => panic!("match fell through?"),
        }
    }

{{produces}}

#### Explanation

Previous versions of Rust accepted constants in patterns, even if those constants’ types did not have `PartialEq` implemented. The compiler falls back to comparing the value field-by-field. In the future we’d like to ensure that pattern matching always follows `PartialEq` semantics, so that trait bound will become a requirement for matching on constants.