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