# `match_default_bindings`

The tracking issue for this feature is: #42640

Match default bindings (also called "default binding modes in match") improves ergonomics for pattern-matching on references by introducing automatic dereferencing (and a corresponding shift in binding modes) for large classes of patterns that would otherwise not compile.

For example, under match default bindings,

    #![feature(match_default_bindings)]

    fn main() {
        let x: &Option<_> = &Some(0);

        match x {
            Some(y) => {
                println!("y={}", *y);
            },
            None => {},
        }
    }

compiles and is equivalent to either of the below:

    fn main() {
        let x: &Option<_> = &Some(0);

        match *x {
            Some(ref y) => {
                println!("y={}", *y);
            },
            None => {},
        }
    }

or

    fn main() {
        let x: &Option<_> = &Some(0);

        match x {
            &Some(ref y) => {
                println!("y={}", *y);
            },
            &None => {},
        }
    }