]> git.proxmox.com Git - rustc.git/blob - vendor/maybe-uninit/README.md
New upstream version 1.46.0~beta.2+dfsg1
[rustc.git] / vendor / maybe-uninit / README.md
1 # maybe-uninit
2
3 Quite often, uses of `std::mem::uninitialized()` end up in unsound code.
4 Therefore, the `MaybeUninit` union has been added to `std::mem` and `std::mem::uninitialized()` is being deprecated.
5 However, `MaybeUninit` has been added quite recently.
6 Sometimes you might want to support older versions of Rust as well.
7 Here is where `maybe-uninit` comes in: it supports stable Rust versions starting with 1.20.0.
8
9 Sadly, a feature-complete implementation of `MaybeUninit` is not possible on stable Rust.
10 Therefore, the library offers the guarantees of `MaybeUninit` in a staged fashion:
11
12 * Rust 1.36.0 onward: `MaybeUninit` implementation of Rust stable is being re-exported
13
14 * Rust 1.22.x - 1.35.0: No panicing on uninhabited types,
15 unsoundness when used with types like `bool` or enums.
16 However, there is protection from accidentially `Drop`ing e.g. during unwind!
17
18 * Rust 1.20.x - 1.21.x: No support for Copy/Clone of `MaybeUninit<T>`,
19 even if `T` impls `Copy` or even `Clone`.