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 => {}, } }