1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
// check-pass use std::mem::ManuallyDrop; struct A; struct B; union U { a: ManuallyDrop<A>, b: ManuallyDrop<B>, } fn main() { unsafe { { 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 } } }