Skip to content

Commit 84a6915

Browse files
committed
Add const Default for *Cell
1 parent 0ae3f87 commit 84a6915

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

library/core/src/cell.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,8 @@ impl<T: Copy> Clone for Cell<T> {
333333
}
334334

335335
#[stable(feature = "rust1", since = "1.0.0")]
336-
impl<T: Default> Default for Cell<T> {
336+
#[rustc_const_unstable(feature = "const_default", issue = "none")]
337+
impl<T: ~const Default> const Default for Cell<T> {
337338
/// Creates a `Cell<T>`, with the `Default` value for T.
338339
#[inline]
339340
fn default() -> Cell<T> {
@@ -1326,7 +1327,8 @@ impl<T: Clone> Clone for RefCell<T> {
13261327
}
13271328

13281329
#[stable(feature = "rust1", since = "1.0.0")]
1329-
impl<T: Default> Default for RefCell<T> {
1330+
#[rustc_const_unstable(feature = "const_default", issue = "none")]
1331+
impl<T: ~const Default> const Default for RefCell<T> {
13301332
/// Creates a `RefCell<T>`, with the `Default` value for T.
13311333
#[inline]
13321334
fn default() -> RefCell<T> {
@@ -2333,7 +2335,8 @@ impl<T: ?Sized> UnsafeCell<T> {
23332335
}
23342336

23352337
#[stable(feature = "unsafe_cell_default", since = "1.10.0")]
2336-
impl<T: Default> Default for UnsafeCell<T> {
2338+
#[rustc_const_unstable(feature = "const_default", issue = "none")]
2339+
impl<T: ~const Default> const Default for UnsafeCell<T> {
23372340
/// Creates an `UnsafeCell`, with the `Default` value for T.
23382341
fn default() -> UnsafeCell<T> {
23392342
UnsafeCell::new(Default::default())
@@ -2440,7 +2443,8 @@ impl<T: ?Sized> SyncUnsafeCell<T> {
24402443
}
24412444

24422445
#[unstable(feature = "sync_unsafe_cell", issue = "95439")]
2443-
impl<T: Default> Default for SyncUnsafeCell<T> {
2446+
#[rustc_const_unstable(feature = "const_default", issue = "none")]
2447+
impl<T: ~const Default> const Default for SyncUnsafeCell<T> {
24442448
/// Creates an `SyncUnsafeCell`, with the `Default` value for T.
24452449
fn default() -> SyncUnsafeCell<T> {
24462450
SyncUnsafeCell::new(Default::default())

tests/ui/traits/const-traits/const-traits-core.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
//@ run-pass
2-
#![feature(const_trait_impl, const_default, ptr_alignment_type, ascii_char, f16, f128)]
2+
#![feature(
3+
const_trait_impl, const_default, ptr_alignment_type, ascii_char, f16, f128, sync_unsafe_cell,
4+
)]
35
#![allow(dead_code)]
46
// core::default
57
const UNIT: () = Default::default();
@@ -32,8 +34,13 @@ const ALIGNMENT: std::ptr::Alignment = Default::default();
3234
// core::slice
3335
const SLICE: &[()] = Default::default();
3436
const MUT_SLICE: &mut [()] = Default::default();
35-
//core::str
37+
// core::str
3638
const STR: &str = Default::default();
3739
const MUT_STR: &mut str = Default::default();
40+
// core::cell
41+
const CELL: std::cell::Cell<()> = Default::default();
42+
const REF_CELL: std::cell::RefCell<()> = Default::default();
43+
const UNSAFE_CELL: std::cell::UnsafeCell<()> = Default::default();
44+
const SYNC_UNSAFE_CELL: std::cell::SyncUnsafeCell<()> = Default::default();
3845

3946
fn main() {}

0 commit comments

Comments
 (0)