use std::mem; fn leak(mut b: Box) -> &'static mut T { // isn't this supposed to be safe? let inner = &mut *b as *mut _; mem::forget(b); unsafe { &mut *inner } } fn evil(mut s: &'static mut String) { // create alias let alias: &'static mut String = s; let inner: &str = &alias; // free value *s = String::new(); //~ ERROR cannot assign let _spray = "0wned".to_owned(); // ... and then use it println!("{}", inner); } fn main() { evil(leak(Box::new("hello".to_owned()))); }