use std::mem::ManuallyDrop; | |
// Non-copy | |
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; | |
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 | |
} | |
} | |
} |