This crate brings out references to Rust, this crate has no_std
support
Out reference never read values behind the reference
use out_reference::*;
let mut x = 0;
let mut out_x: Out<'_, u32> = x.out();
out_x.set(10);
assert_eq!(x, 10);
Note that setting a value does not drop the old value, as that would require at least 1 read of the value behind the pointer
So, the code below leaks the vector
use out_reference::*;
let mut x = vec![0, 1, 2];
let mut out_x: Out<'_, Vec<u32>> = x.out();
out_x.set(vec![]);
assert_eq!(x, vec![]);