@@ -526,6 +526,7 @@ impl<T> MaybeUninit<T> {
526526 /// ### Correct usage of this method:
527527 ///
528528 /// ```rust
529+ /// #![feature(maybe_uninit_ref)]
529530 /// use ::std::mem::MaybeUninit;
530531 ///
531532 /// let mut x = MaybeUninit::<Vec<u32>>::uninit();
@@ -547,6 +548,7 @@ impl<T> MaybeUninit<T> {
547548 /// ### *Incorrect* usages of this method:
548549 ///
549550 /// ```rust,no_run
551+ /// #![feature(maybe_uninit_ref)]
550552 /// use std::mem::MaybeUninit;
551553 ///
552554 /// let x = MaybeUninit::<Vec<u32>>::uninit();
@@ -555,6 +557,7 @@ impl<T> MaybeUninit<T> {
555557 /// ```
556558 ///
557559 /// ```rust,no_run
560+ /// #![feature(maybe_uninit_ref)]
558561 /// use std::{cell::Cell, mem::MaybeUninit};
559562 ///
560563 /// let b = MaybeUninit::<Cell<bool>>::uninit();
@@ -589,6 +592,7 @@ impl<T> MaybeUninit<T> {
589592 /// ### Correct usage of this method:
590593 ///
591594 /// ```rust
595+ /// #![feature(maybe_uninit_ref)]
592596 /// use ::std::mem::MaybeUninit;
593597 ///
594598 /// # unsafe extern "C" fn initialize_buffer (buf: *mut [u8; 2048]) { *buf = [0; 2048] }
@@ -599,6 +603,7 @@ impl<T> MaybeUninit<T> {
599603 /// }
600604 ///
601605 /// let mut buf = MaybeUninit::<[u8; 2048]>::uninit();
606+ ///
602607 /// // Initialize `buf`:
603608 /// unsafe { initialize_buffer(buf.as_mut_ptr()); }
604609 /// // Now we know that `buf` has been initialized; so we could `.assume_init()` it.
@@ -611,16 +616,21 @@ impl<T> MaybeUninit<T> {
611616 /// // - `buf` has been initialized.
612617 /// buf.get_mut()
613618 /// };
619+ ///
614620 /// // Now we can use `buf` as a normal slice:
615621 /// buf.sort_unstable();
616- /// assert!(buf.is_sorted());
622+ /// assert!(
623+ /// buf.chunks(2).all(|chunk| chunk[0] <= chunk[1]),
624+ /// "buffer is sorted",
625+ /// );
617626 /// ```
618627 ///
619628 /// ### *Incorrect* usages of this method:
620629 ///
621- /// Do not use `.get_mut()` to initialize a value
630+ /// You cannot use `.get_mut()` to initialize a value:
622631 ///
623632 /// ```rust,no_run
633+ /// #![feature(maybe_uninit_ref)]
624634 /// use std::mem::MaybeUninit;
625635 ///
626636 /// let mut b = MaybeUninit::<bool>::uninit();
@@ -631,11 +641,12 @@ impl<T> MaybeUninit<T> {
631641 /// }
632642 /// ```
633643 ///
634- /// For instance, you cannot [`Read`] into an uninitialized buffer.
644+ /// For instance, you cannot [`Read`] into an uninitialized buffer:
635645 ///
636646 /// [`Read`]: https://doc.rust-lang.org/std/io/trait.Read.html
637647 ///
638648 /// ```rust,no_run
649+ /// #![feature(maybe_uninit_ref)]
639650 /// use std::{io, mem::MaybeUninit};
640651 ///
641652 /// fn read_chunk (reader: &'_ mut dyn io::Read) -> io::Result<[u8; 64]>
@@ -645,22 +656,23 @@ impl<T> MaybeUninit<T> {
645656 /// // ^^^^^^^^^^^^^^^^
646657 /// // (mutable) reference to uninitialized memory!
647658 /// // This is undefined behavior.
648- /// Ok(buffer.assume_init())
659+ /// Ok(unsafe { buffer.assume_init() } )
649660 /// }
650661 /// ```
651662 ///
652- /// Nor can you use direct field access to do field-by-field gradual initialization.
663+ /// Nor can you use direct field access to do field-by-field gradual initialization:
653664 ///
654665 /// ```rust,no_run
655- /// use std::mem::MaybeUninit;
666+ /// #![feature(maybe_uninit_ref)]
667+ /// use std::{mem::MaybeUninit, ptr};
656668 ///
657669 /// struct Foo {
658670 /// a: u32,
659671 /// b: u8,
660672 /// }
661673 ///
662674 /// let foo: Foo = unsafe {
663- /// let foo = MaybeUninit::<Foo>::uninit();
675+ /// let mut foo = MaybeUninit::<Foo>::uninit();
664676 /// ptr::write(&mut foo.get_mut().a as *mut u32, 1337);
665677 /// // ^^^^^^^^^^^^^
666678 /// // (mutable) reference to uninitialized memory!
0 commit comments