use Array;
use ManuallyDrop;
/// A combination of ManuallyDrop and “maybe uninitialized”;
/// this wraps a value that can be wholly or partially uninitialized;
/// it also has no drop regardless of the type of T.
// for cast from self ptr to value
pub union
// Why we don't use std's MaybeUninit on nightly? See the ptr method