//@ run-rustfix #![deny(rust_2021_incompatible_closure_captures)] //~^ NOTE lint level is defined here fn main() { struct Foo(u32); impl Drop for Foo { fn drop(&mut self) { println!("dropped {}", self.0); } } let f0 = Foo(0); let f1 = Foo(1); let c0 = move || { //~^ ERROR changes to closure capture in Rust 2021 will affect drop order //~| NOTE for more information let _ = f0; //~^ NOTE in Rust 2018, this causes the closure to capture `f0`, but in Rust 2021, it has no effect }; let c1 = move || { let _ = &f1; }; println!("dropping 0"); drop(c0); println!("dropping 1"); drop(c1); println!("dropped all"); } //~^ NOTE in Rust 2018, `f0` is dropped here along with the closure, but in Rust 2021 `f0` is not part of the closure