diff options
| author | Phil Ruffwind <rf@rufflewind.com> | 2017-02-23 19:19:25 -0500 |
|---|---|---|
| committer | Phil Ruffwind <rf@rufflewind.com> | 2017-02-25 00:25:13 -0500 |
| commit | 1f75085ae510d0786da6200172e9b3193b0fa090 (patch) | |
| tree | 26a8a1c416e23bf7bfac3212be7a514b0fb5eb1f /src | |
| parent | 413a975e31584d1e22d158a70c6d3073b991a618 (diff) | |
Add Gankro's table to nomicon/src/phantom-data.md
Original: https://github.com/rust-lang/rust/issues/30069#issuecomment-159928136 Testing confirms that: - PhantomData<fn() -> T> does not actually enable drop checking. - PhantomData<fn(T) -> T> is neither variant nor contravariant.
Diffstat (limited to 'src')
| -rw-r--r-- | src/doc/nomicon/src/phantom-data.md | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/doc/nomicon/src/phantom-data.md b/src/doc/nomicon/src/phantom-data.md index 72fa2e2a777..32539c2d01f 100644 --- a/src/doc/nomicon/src/phantom-data.md +++ b/src/doc/nomicon/src/phantom-data.md @@ -82,5 +82,23 @@ standard library made a utility for itself called `Unique<T>` which: * wraps a `*const T` for variance * includes a `PhantomData<T>` -* auto-derives Send/Sync as if T was contained -* marks the pointer as NonZero for the null-pointer optimization +* auto-derives `Send`/`Sync` as if T was contained +* marks the pointer as `NonZero` for the null-pointer optimization + +## Table of `PhantomData` patterns + +Here’s a table of all the wonderful ways `PhantomData` could be used: + +| Phantom type | `'a` | `T` | +|-----------------------------|-----------|---------------------------| +| `PhantomData<T>` | - | variant (with drop check) | +| `PhantomData<&'a T>` | variant | variant | +| `PhantomData<&'a mut T>` | variant | invariant | +| `PhantomData<*const T>` | - | variant | +| `PhantomData<*mut T>` | - | invariant | +| `PhantomData<fn(T)>` | - | contravariant (*) | +| `PhantomData<fn() -> T>` | - | variant | +| `PhantomData<fn(T) -> T>` | - | invariant | +| `PhantomData<Cell<&'a ()>>` | invariant | - | + +(*) If contravariance gets scrapped, this would be invariant. |
