// by steffahn #![feature(pin_macro)] use std::cell::Cell; use std::pin::pin; use selfref::opaque; use selfref::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(|builder| builder.build(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 }); }