use std::mem::ManuallyDrop; // Non-copy struct A; struct B; union U { a: ManuallyDrop, b: ManuallyDrop, } fn main() { unsafe { { let mut u = U { a: ManuallyDrop::new(A) }; let a = u.a; let a = u.a; //~ ERROR use of moved value: `u` } { let mut u = U { a: ManuallyDrop::new(A) }; let a = u.a; u.a = ManuallyDrop::new(A); let a = u.a; // OK } { let mut u = U { a: ManuallyDrop::new(A) }; let a = u.a; u.b = ManuallyDrop::new(B); let a = u.a; // OK } } }