Skip to content

MaybeUninit for friends of backwards compatibility

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

est31/maybe-uninit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

maybe-uninit

Quite often, uses of std::mem::uninitialized() end up in unsound code. Therefore, the MaybeUninit union has been added to std::mem and std::mem::uninitialized() is being deprecated. However, MaybeUninit has been added quite recently. Sometimes you might want to support older versions of Rust as well. Here is where maybe-uninit comes in: it supports stable Rust versions starting with 1.20.0.

Sadly, a feature-complete implementation of MaybeUninit is not possible on stable Rust. Therefore, the library offers the guarantees of MaybeUninit in a staged fashion:

  • Rust 1.36.0 onward: MaybeUninit implementation of Rust stable is being re-exported

  • Rust 1.22.x - 1.35.0: No panicing on uninhabited types, unsoundness when used with types like bool or enums. However, there is protection from accidentially Droping e.g. during unwind!

  • Rust 1.20.x - 1.21.x: No support for Copy/Clone of MaybeUninit<T>, even if T impls Copy or even Clone.

About

MaybeUninit for friends of backwards compatibility

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Packages

No packages published

Languages