use std::any::Any; #[derive(Debug, Clone)] struct S(T); // S<&'a T> is in the return type, so we get an implied bound // &'a T: 'static fn foo<'a, T>(x: &'a T) -> (S<&'a T>, Box) { let y = S(x); let z = Box::new(y.clone()) as Box; (y, z) } fn main() { let x = 5; // Check that we require that the argument is of type `&'static String`, // so that the return type is well-formed. let (_, z) = foo(&"hello".to_string()); //~^ ERROR temporary value dropped while borrowed println!("{:?}", z.downcast_ref::>()); }