The question is simple but I haven't been able to find the answer. Is the following piece of code valid/safe in Rust:
use core::mem::MaybeUninit;
// This is a ZST
#[derive(Debug)]
struct MyStruct;
// This is an uninhabited type
#[derive(Debug)]
enum MyEnum {}
#[derive(Debug)]
enum OneVariantEnum {
Variant1,
}
fn main() {
let s: MaybeUninit<MyStruct> = MaybeUninit::uninit();
println!("s: {:?}", unsafe { s.assume_init() });
let e: MaybeUninit<MyEnum> = MaybeUninit::uninit();
println!("e: {:?}", unsafe { e.assume_init() });
// and what about this?
let o: MaybeUninit<OneVariantEnum> = MaybeUninit::uninit();
println!("o: {:?}", unsafe { o.assume_init() });
}