| #![feature(try_as_dyn)] |
| |
| use std::any::try_as_dyn; |
| |
| type Payload = Box<i32>; |
| |
| trait Trait { |
| fn as_static(&self) -> &'static Payload |
| where |
| Self: 'static; |
| } |
| |
| impl<'a> Trait for &'a Payload { |
| fn as_static(&self) -> &'static Payload |
| where |
| Self: 'static, |
| { |
| *self |
| } |
| } |
| |
| fn main() { |
| let storage: Box<Payload> = Box::new(Box::new(1i32)); |
| let wrong: &'static Payload = extend(&*storage); |
| drop(storage); |
| println!("{wrong}"); |
| } |
| |
| fn extend(a: &Payload) -> &'static Payload { |
| let b: &(dyn Trait + 'static) = try_as_dyn::<&Payload, dyn Trait + 'static>(&a).unwrap(); |
| //~^ ERROR: borrowed data escapes outside of function |
| b.as_static() |
| } |