use std::mem::transmute; #[cfg(target_pointer_width = "32")] type TwoPtrs = i64; #[cfg(target_pointer_width = "64")] type TwoPtrs = i128; fn main() { for &my_bool in &[true, false] { let mask = -(my_bool as TwoPtrs); // false -> 0, true -> -1 aka !0 // This is branchless code to select one or the other pointer. // However, it drops provenance when transmuting to TwoPtrs, so this is UB. let val = unsafe { transmute::<_, &str>( //~^ ERROR constructing invalid value: encountered a dangling reference !mask & transmute::<_, TwoPtrs>("false !") | mask & transmute::<_, TwoPtrs>("true !"), ) }; println!("{}", val); } }