diff --git a/src/phantom-data.md b/src/phantom-data.md index ad59d81..9a6ed64 100644 --- a/src/phantom-data.md +++ b/src/phantom-data.md @@ -160,18 +160,18 @@ ___ 여기 `PhantomData`가 사용될 수 있는 모든 경우의 놀라운 표가 있습니다: -| 흉내내는 타입 | `'a`의 변성 | `T`의 변성 | `Send`/`Sync`
(or lack thereof) | dangling `'a` or `T` in drop glue
(_e.g._, `#[may_dangle] Drop`) | +| 흉내내는 타입 | `'a`의 변성 | `T`의 변성 | `Send`/`Sync`
(or lack thereof) | 해제 구현에서 `'a` 나 `T`의 달랑거림
(_예_: `#[may_dangle] Drop`) | |-----------------------------|:----------------:|:-----------------:|:-----------------------------------------:|:------------------------------------------------:| -| `PhantomData` | - | **cov**ariant | inherited | disallowed ("owns `T`") | -| `PhantomData<&'a T>` | **cov**ariant | **cov**ariant | `Send + Sync`
requires
`T : Sync` | allowed | -| `PhantomData<&'a mut T>` | **cov**ariant | **inv**ariant | inherited | allowed | -| `PhantomData<*const T>` | - | **cov**ariant | `!Send + !Sync` | allowed | -| `PhantomData<*mut T>` | - | **inv**ariant | `!Send + !Sync` | allowed | -| `PhantomData` | - | **contra**variant | `Send + Sync` | allowed | -| `PhantomData T>` | - | **cov**ariant | `Send + Sync` | allowed | -| `PhantomData T>` | - | **inv**ariant | `Send + Sync` | allowed | -| `PhantomData>` | **inv**ariant | - | `Send + !Sync` | allowed | - - - Note: opting out of the `Unpin` auto-trait requires the dedicated [`PhantomPinned`] type instead. - -[`PhantomPinned`]: ../core/marker/struct.PhantomPinned.html +| `PhantomData` | - | **공**변 | 전달 | 불가 ("`T`를 소유") | +| `PhantomData<&'a T>` | **공**변 | **공**변 | `T : Sync`
이면
`Send + Sync` | 가능 | +| `PhantomData<&'a mut T>` | **공**변 | **무**변 | 전달 | 가능 | +| `PhantomData<*const T>` | - | **공**변 | `!Send + !Sync` | 가능 | +| `PhantomData<*mut T>` | - | **무**변 | `!Send + !Sync` | 가능 | +| `PhantomData` | - | **반**변 | `Send + Sync` | 가능 | +| `PhantomData T>` | - | **공**변 | `Send + Sync` | 가능 | +| `PhantomData T>` | - | **무**변 | `Send + Sync` | 가능 | +| `PhantomData>` | **무**변 | - | `Send + !Sync` | 가능 | + + - 주의: 자동으로 구현되는 `Unpin` 트레잇을 구현하지 않으려면 따로 선언된 [`PhantomPinned`] 타입을 사용해야 합니다. + +[`PhantomPinned`]: https://doc.rust-lang.org/std/marker/struct.PhantomPinned.html