diff options
| author | Ralf Jung <post@ralfj.de> | 2019-02-27 15:32:32 +0100 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2019-02-27 15:32:32 +0100 |
| commit | 4e7d4c7778a00371ba707fb8f9022bcbb443bb29 (patch) | |
| tree | 30a7597d2ef51698850daa240ac8baeef4ba6c15 /src/libcore | |
| parent | f5b5f924eb9bfe7e28984fb3ae43f65ebe2bdaa2 (diff) | |
| download | rust-4e7d4c7778a00371ba707fb8f9022bcbb443bb29.tar.gz rust-4e7d4c7778a00371ba707fb8f9022bcbb443bb29.zip | |
ManuallyDrop != MaybeUninit
Diffstat (limited to 'src/libcore')
| -rw-r--r-- | src/libcore/mem.rs | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/libcore/mem.rs b/src/libcore/mem.rs index f41d293e80a..6b1b91d00fa 100644 --- a/src/libcore/mem.rs +++ b/src/libcore/mem.rs @@ -900,10 +900,16 @@ pub fn discriminant<T>(v: &T) -> Discriminant<T> { } } +// FIXME: Reference `MaybeUninit` from these docs, once that is stable. /// A wrapper to inhibit compiler from automatically calling `T`’s destructor. /// /// This wrapper is 0-cost. /// +/// `ManuallyDrop<T>` is subject to the same layout optimizations as `T`. +/// As a consequence, it has *no effect* on the assumptions that the compiler makes +/// about all values being initialized at their type. In particular, initializing +/// a `ManuallyDrop<&T>` with [`mem::zeroed`] is undefined behavior. +/// /// # Examples /// /// This wrapper helps with explicitly documenting the drop order dependencies between fields of @@ -935,6 +941,8 @@ pub fn discriminant<T>(v: &T) -> Discriminant<T> { /// } /// } /// ``` +/// +/// [`mem::zeroed']: fn.zeroed.html #[stable(feature = "manually_drop", since = "1.20.0")] #[lang = "manually_drop"] #[derive(Copy, Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] |
