about summary refs log tree commit diff
path: root/src/libcore
diff options
context:
space:
mode:
authorkennytm <kennytm@gmail.com>2018-10-28 16:38:48 +0800
committerGitHub <noreply@github.com>2018-10-28 16:38:48 +0800
commita79b91231e3dff407bdaee13e34c53f3451f40be (patch)
tree3a4845568b1f71f046060c5f4bb6cbde7397bbee /src/libcore
parent409382e100ab6b2434f194b37e7b691867d671ba (diff)
parentac186354354e6032c34ad95ce22d526371729cb6 (diff)
downloadrust-a79b91231e3dff407bdaee13e34c53f3451f40be.tar.gz
rust-a79b91231e3dff407bdaee13e34c53f3451f40be.zip
Rollup merge of #55252 - SimonSapin:maybeuninit-new, r=bluss
Add MaybeUninit::new

Sometimes it *is* initialized!
Diffstat (limited to 'src/libcore')
-rw-r--r--src/libcore/lib.rs1
-rw-r--r--src/libcore/mem.rs9
2 files changed, 10 insertions, 0 deletions
diff --git a/src/libcore/lib.rs b/src/libcore/lib.rs
index 4156b1bec92..06727d8292d 100644
--- a/src/libcore/lib.rs
+++ b/src/libcore/lib.rs
@@ -82,6 +82,7 @@
 #![feature(const_fn)]
 #![feature(const_int_ops)]
 #![feature(const_fn_union)]
+#![feature(const_manually_drop_new)]
 #![feature(custom_attribute)]
 #![feature(doc_cfg)]
 #![feature(doc_spotlight)]
diff --git a/src/libcore/mem.rs b/src/libcore/mem.rs
index 27ee9556bd0..a955e0e662a 100644
--- a/src/libcore/mem.rs
+++ b/src/libcore/mem.rs
@@ -1021,6 +1021,15 @@ pub union MaybeUninit<T> {
 }
 
 impl<T> MaybeUninit<T> {
+    /// Create a new `MaybeUninit` initialized with the given value.
+    ///
+    /// Note that dropping a `MaybeUninit` will never call `T`'s drop code.
+    /// It is your responsibility to make sure `T` gets dropped if it got initialized.
+    #[unstable(feature = "maybe_uninit", issue = "53491")]
+    pub const fn new(val: T) -> MaybeUninit<T> {
+        MaybeUninit { value: ManuallyDrop::new(val) }
+    }
+
     /// Create a new `MaybeUninit` in an uninitialized state.
     ///
     /// Note that dropping a `MaybeUninit` will never call `T`'s drop code.