@@ -494,8 +494,9 @@ impl<T> Cell<T> {
494494/// ```
495495#[ inline]
496496#[ stable( feature = "move_cell" , since = "1.17.0" ) ]
497+ #[ rustc_const_unstable( feature = "const_cell" , issue = "131283" ) ]
497498#[ rustc_confusables( "swap" ) ]
498- pub fn replace ( & self , val : T ) -> T {
499+ pub const fn replace ( & self , val : T ) -> T {
499500// SAFETY: This can cause data races if called from a separate thread,
500501// but `Cell` is `!Sync` so this won't happen.
501502 mem:: replace ( unsafe { & mut * self . value . get ( ) } , val)
@@ -535,7 +536,8 @@ impl<T: Copy> Cell<T> {
535536/// ```
536537#[ inline]
537538#[ stable( feature = "rust1" , since = "1.0.0" ) ]
538- pub fn get ( & self ) -> T {
539+ #[ rustc_const_unstable( feature = "const_cell" , issue = "131283" ) ]
540+ pub const fn get ( & self ) -> T {
539541// SAFETY: This can cause data races if called from a separate thread,
540542// but `Cell` is `!Sync` so this won't happen.
541543unsafe { * self . value . get ( ) }
@@ -613,7 +615,8 @@ impl<T: ?Sized> Cell<T> {
613615/// ```
614616#[ inline]
615617#[ stable( feature = "cell_get_mut" , since = "1.11.0" ) ]
616- pub fn get_mut ( & mut self ) -> & mut T {
618+ #[ rustc_const_unstable( feature = "const_cell" , issue = "131283" ) ]
619+ pub const fn get_mut ( & mut self ) -> & mut T {
617620self . value . get_mut ( )
618621}
619622
@@ -632,7 +635,8 @@ impl<T: ?Sized> Cell<T> {
632635/// ```
633636#[ inline]
634637#[ stable( feature = "as_cell" , since = "1.37.0" ) ]
635- pub fn from_mut ( t : & mut T ) -> & Cell < T > {
638+ #[ rustc_const_unstable( feature = "const_cell" , issue = "131283" ) ]
639+ pub const fn from_mut ( t : & mut T ) -> & Cell < T > {
636640// SAFETY: `&mut` ensures unique access.
637641unsafe { & * ( t as * mut T as * const Cell < T > ) }
638642}
@@ -686,7 +690,8 @@ impl<T> Cell<[T]> {
686690/// assert_eq!(slice_cell.len(), 3);
687691/// ```
688692#[ stable( feature = "as_cell" , since = "1.37.0" ) ]
689- pub fn as_slice_of_cells ( & self ) -> & [ Cell < T > ] {
693+ #[ rustc_const_unstable( feature = "const_cell" , issue = "131283" ) ]
694+ pub const fn as_slice_of_cells ( & self ) -> & [ Cell < T > ] {
690695// SAFETY: `Cell<T>` has the same memory layout as `T`.
691696unsafe { & * ( self as * const Cell < [ T ] > as * const [ Cell < T > ] ) }
692697}
@@ -706,7 +711,8 @@ impl<T, const N: usize> Cell<[T; N]> {
706711/// let array_cell: &[Cell<i32>; 3] = cell_array.as_array_of_cells();
707712/// ```
708713#[ unstable( feature = "as_array_of_cells" , issue = "88248" ) ]
709- pub fn as_array_of_cells ( & self ) -> & [ Cell < T > ; N ] {
714+ #[ rustc_const_unstable( feature = "as_array_of_cells" , issue = "88248" ) ]
715+ pub const fn as_array_of_cells ( & self ) -> & [ Cell < T > ; N ] {
710716// SAFETY: `Cell<T>` has the same memory layout as `T`.
711717unsafe { & * ( self as * const Cell < [ T ; N ] > as * const [ Cell < T > ; N ] ) }
712718}
0 commit comments