struct Foo<T: Debug>(T);
impl<T: Debug> Drop for Foo<T> {
println!("dropping Foo with {:?}", self.0);
let s = String::from("123");
error[E0597]: `s` does not live long enough
| ^ borrowed value does not live long enough
| `s` dropped here while still borrowed
| borrow might be used here, when `_foo` is dropped and runs the `Drop` code for type `Foo`
= note: values in a scope are dropped in the opposite order they are defined