pub struct PhantomData<T>
where
T: ?Sized;Expand description
Zero-sized type used to mark things that “act like” they own a T.
Adding a PhantomData<T> field to your type tells the compiler that your
type acts as though it stores a value of type T, even though it doesn’t
really. This information is used when computing certain safety properties.
For a more in-depth explanation of how to use PhantomData<T>, please see
the Nomicon.
§A ghastly note 👻👻👻
Though they both have scary names, PhantomData and ‘phantom types’ are
related, but not identical. A phantom type parameter is simply a type
parameter which is never used. In Rust, this often causes the compiler to
complain, and the solution is to add a “dummy” use by way of PhantomData.
§Examples
§Unused lifetime parameters
Perhaps the most common use case for PhantomData is a struct that has an
unused lifetime parameter, typically as part of some unsafe code. For
example, here is a struct Slice that has two pointers of type *const T,
presumably pointing into an array somewhere: