// by steffahn #![feature(pin_macro)] use std::cell::Cell; use std::pin::pin; use selfref::opaque; use selfref::{new_with_closure, Holder}; struct MyStruct<'this> { cell: Cell<&'this str>, } struct MyStructKey; opaque! { impl Opaque for MyStructKey { type Kind<'this> = MyStruct<'this>; } } fn main() { let s = Holder::<'_, MyStructKey>::new_with(new_with_closure::(|[]| MyStruct { cell: Default::default(), })); let s = pin!(s); s.as_ref().operate_in(|r| { r.cell.set(&String::from("hello world")); // temporary dropped at end of this statement println!("{}", r.cell.get()) // accesses dropped `String` data }); }