Open Havvy opened 2 years ago
I guess it's just not updated (we have a lot of outdated content!), I'm happy to see a PR :)
Is there a benefit to adding #[non_exhaustive]
or even having the _data
member at all? PhantomData itself is a ZST no? Also I feel like you could just as well use ()
rather than u8
for the pointer just to further remove any suggestion that this is anything other than a trick to make an opaque FFI type. I might be missing something but wouldn't the following be just as good?
#[repr(C)]
pub struct Foo {
_marker: core::marker::PhantomData<(*mut (), core::marker::PhantomPinned)>,
}
I might be missing something but wouldn't the following be just as good?
#[repr(C)] pub struct Foo { _marker: core::marker::PhantomData<(*mut (), core::marker::PhantomPinned)>, }
I was reading that section and had the exact same question. If the [u8; 0]
is indeed necessary for something then it would be good to clarify in the book what benefit it provides.
Section: https://doc.rust-lang.org/nomicon/ffi.html#representing-opaque-structs
Currently, it uses a struct like this:
But since that was written, we have access to the
#[non_exhausive]
attribute. I think it has the same functionality. Any reason we shouldn't be suggesting this instead?