File tree Expand file tree Collapse file tree 1 file changed +30
-0
lines changed Expand file tree Collapse file tree 1 file changed +30
-0
lines changed Original file line number Diff line number Diff line change @@ -1548,6 +1548,36 @@ impl<T: ?Sized> UnsafeCell<T> {
1548
1548
// #[repr(transparent)]
1549
1549
self as * const UnsafeCell < T > as * const T as * mut T
1550
1550
}
1551
+
1552
+ /// Gets a mutable pointer to the wrapped value.
1553
+ ///
1554
+ /// This can be cast to a pointer of any kind.
1555
+ /// Ensure that the access is unique (no active references, mutable or not)
1556
+ /// when casting to `&mut T`, and ensure that there are no mutations
1557
+ /// or mutable aliases going on when casting to `&T`
1558
+ ///
1559
+ /// # Examples
1560
+ ///
1561
+ /// Gradual initialization of an `UnsafeCell`:
1562
+ ///
1563
+ /// ```
1564
+ /// #![feature(unsafe_cell_raw_get)]
1565
+ /// use std::cell::UnsafeCell;
1566
+ /// use std::mem::MaybeUninit;
1567
+ ///
1568
+ /// let m = MaybeUninit::<UnsafeCell<i32>>::uninit();
1569
+ /// unsafe { m.as_ptr().raw_get().write(5); }
1570
+ /// let uc = unsafe { m.assume_init() };
1571
+ ///
1572
+ /// assert_eq!(uc.into_inner(), 5);
1573
+ /// ```
1574
+ #[ inline]
1575
+ #[ unstable( feature = "unsafe_cell_raw_get" , issue = "0" ) ]
1576
+ pub const fn raw_get ( self : * const Self ) -> * mut T {
1577
+ // We can just cast the pointer from `UnsafeCell<T>` to `T` because of
1578
+ // #[repr(transparent)]
1579
+ self as * const T as * mut T
1580
+ }
1551
1581
}
1552
1582
1553
1583
#[ stable( feature = "unsafe_cell_default" , since = "1.10.0" ) ]
You can’t perform that action at this time.
0 commit comments