Open
Description
These two types could be laid out the same. However, the second type makes it explicit that the tag is logically split across different bytes. Is this something we'd be okay with the compiler doing on its own? Inspecting the next part of the tag might require an extra load.
enum ShortSlice<T> {
Empty,
Single(T),
Multi(Box<[T]>),
}
dbg!(size_of::<ShortSlice<NonZeroUsize>>()); // 24
enum ShortSlice2<T> {
ZeroOne(Option<T>),
Multi(Box<[T]>),
}
dbg!(size_of::<ShortSlice2<NonZeroUsize>>()); // 16