I have a
T: ?Sized), and I need to get the size of its referent. Is there any way to do this on stable Rust? I will accept crazy hacks as long as they're sound.
I know that the
NonNull<T> points to an initialized sequence of bytes, and I know that it is valid for reads, but I don't know that it contains a valid
T. E.g., if materializing a
&T to an invalid
T were sound (it isn't), I'd be willing to materialize a
&T and then call
I think this is still an open question. There's at least one faction arguing that the validity of the referee is only a safety invariant of the reference, not a validity invariant. After all, AFAIK MIRI doesn't check that
slice::from_raw_parts::<NonZeroU32>(p, n) actually points to non-zero memory.
The "official" way might go through something like https://doc.rust-lang.org/nightly/std/ptr/struct.NonNull.html#method.to_raw_parts, but that's not stable yet.
std::intrinsics version of
size_of_val actually takes a raw pointer.
Which probably doesn't help you much, as you want a stable way to emulate a