@@ -728,23 +728,23 @@ unsafe impl<T: ?Sized> Freeze for &mut T {}
728
728
729
729
/// Types that can be safely moved after being pinned.
730
730
///
731
- /// Since Rust itself has no notion of immovable types, and considers moves
732
- /// (e.g., through assignment or [`mem::replace`]) to always be safe,
733
- /// this trait cannot prevent types from moving by itself.
731
+ /// Rust itself has no notion of immovable types, and considers moves (e.g.,
732
+ /// through assignment or [`mem::replace`]) to always be safe.
734
733
///
735
- /// Instead it is used to prevent moves through the type system,
736
- /// by controlling the behavior of pointers `P ` wrapped in the [`Pin<P>`] wrapper,
737
- /// which "pin" the type in place by not allowing it to be moved out of them.
738
- /// See the [`pin module`] documentation for more information on pinning.
734
+ /// The [`Pin`][Pin] type is used instead to prevent moves through the type
735
+ /// system. Pointers `P<T> ` wrapped in the [`Pin<P<T>>`][Pin] wrapper can't be
736
+ /// moved out of. See the [`pin module`] documentation for more information on
737
+ /// pinning.
739
738
///
740
- /// Implementing this trait lifts the restrictions of pinning off a type,
741
- /// which then allows it to move out with functions such as [`mem::replace`].
739
+ /// Implementing the `Unpin` trait for `T` lifts the restrictions of pinning off
740
+ /// the type, which then allows moving `T` out of [`Pin<P<T>>`][Pin] with
741
+ /// functions such as [`mem::replace`].
742
742
///
743
743
/// `Unpin` has no consequence at all for non-pinned data. In particular,
744
744
/// [`mem::replace`] happily moves `!Unpin` data (it works for any `&mut T`, not
745
- /// just when `T: Unpin`). However, you cannot use
746
- /// [`mem::replace`] on data wrapped inside a [`Pin<P>`] because you cannot get the
747
- /// `&mut T` you need for that, and *that* is what makes this system work.
745
+ /// just when `T: Unpin`). However, you cannot use [`mem::replace`] on data
746
+ /// wrapped inside a [`Pin<P<T>>`][Pin] because you cannot get the `&mut T` you
747
+ /// need for that, and *that* is what makes this system work.
748
748
///
749
749
/// So this, for example, can only be done on types implementing `Unpin`:
750
750
///
@@ -765,8 +765,8 @@ unsafe impl<T: ?Sized> Freeze for &mut T {}
765
765
/// This trait is automatically implemented for almost every type.
766
766
///
767
767
/// [`mem::replace`]: ../../std/mem/fn.replace.html
768
- /// [` Pin<P>` ]: ../ pin/struct. Pin.html
769
- /// [`pin module`]: ../../std/ pin/index.html
768
+ /// [Pin]: crate:: pin:: Pin
769
+ /// [`pin module`]: crate:: pin
770
770
#[ stable( feature = "pin" , since = "1.33.0" ) ]
771
771
#[ rustc_on_unimplemented(
772
772
on( _Self = "std::future::Future" , note = "consider using `Box::pin`" , ) ,
0 commit comments