// Check the if let guards don't force capture by value //@ revisions: e2018 e2021 //@[e2018] edition:2018 //@[e2021] edition:2021 #![feature(if_let_guard)] #![allow(irrefutable_let_patterns)] fn if_let_ref_mut(mut value: Box) { let f = |x: &E| { match &x { E::Number(_) if let E::Number(ref mut n) = *value => { } _ => {} } }; let x = value; //~^ ERROR cannot move out of `value` because it is borrowed drop(f); } fn if_let_move(value: Box) { let f = |x: &E| { match &x { E::Number(_) if let E::String(s) = *value => { } _ => {} } }; let x = value; //~^ ERROR use of moved value: `value` } enum E { String(String), Number(i32), } fn main() {}