# `irrefutable_let_patterns`

The tracking issue for this feature is: #44495

This feature changes the way that "irrefutable patterns" are handled in the `if let` and `while let` forms. An irrefutable pattern is one that cannot fail to match -- for example, the `_` pattern matches any value, and hence it is "irrefutable". Without this feature, using an irrefutable pattern in an `if let` gives a hard error (since often this indicates programmer error). But when the feature is enabled, the error becomes a lint (since in some cases irrefutable patterns are expected). This means you can use `#[allow]` to silence the lint:

    #![feature(irrefutable_let_patterns)]

    #[allow(irrefutable_let_patterns)]
    fn main() {
        // These two examples used to be errors, but now they
        // trigger a lint (that is allowed):
        if let _ = 5 {}
        while let _ = 5 { break; }
    }