E0297 - Error codes index
Description: Book listing all Rust error codes

# Error code E0297

#### Note: this error code is no longer emitted by the compiler.

Patterns used to bind names must be irrefutable. That is, they must guarantee that a name will be extracted in all cases. Instead of pattern matching the loop variable, consider using a `match` or `if let` inside the loop body. For instance:

    #![allow(unused)]
    fn main() {
    let xs : Vec<Option<i32>> = vec![Some(1), None];

    // This fails because `None` is not covered.
    for Some(x) in xs {
        // ...
    }
    }

Match inside the loop instead:

    #![allow(unused)]
    fn main() {
    let xs : Vec<Option<i32>> = vec![Some(1), None];

    for item in xs {
        match item {
            Some(x) => {},
            None => {},
        }
    }
    }

Or use `if let`:

    #![allow(unused)]
    fn main() {
    let xs : Vec<Option<i32>> = vec![Some(1), None];

    for item in xs {
        if let Some(x) = item {
            // ...
        }
    }
    }