Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tracking Issue for const_default_impls #87864

Open
1 of 3 tasks
fee1-dead opened this issue Aug 8, 2021 · 4 comments
Open
1 of 3 tasks

Tracking Issue for const_default_impls #87864

fee1-dead opened this issue Aug 8, 2021 · 4 comments
Labels
C-tracking-issue Category: A tracking issue for an RFC or an unstable feature. F-const_trait_impl `#![feature(const_trait_impl)]` T-libs-api Relevant to the library API team, which will review and decide on the PR/issue.

Comments

@fee1-dead
Copy link
Member

fee1-dead commented Aug 8, 2021

Feature gate: #![feature(const_default_impls)]

This is a tracking issue for const Default impls in the standard library.

Public API

// core::array
impl<T> const Default for [T; 0];

// core::default
impl const Default for ();
impl const Default for bool;
impl const Default for char;
impl const Default for usize;
impl const Default for u8;
impl const Default for u16;
impl const Default for u32;
impl const Default for u64;
impl const Default for u128;
impl const Default for isize;
impl const Default for i8;
impl const Default for i16;
impl const Default for i32;
impl const Default for i64;
impl const Default for i128;
impl const Default for f32;
impl const Default for f64;

// core::hash
impl<H> const Default for BuildHasherDefault<H>;

// core::iter
impl<T> const Default for Empty<T>;

// core::marker
impl<T: ?Sized> const Default for PhantomData<T>;

// core::option
impl<T> const Default for Option<T>;

// core::slice
impl<T> const Default for &[T];
impl<T> const Default for &mut [T];

// core::str
impl const Default for &str;

// core::sync::atomic
impl const Default for AtomicBool;
impl<T> const Default for AtomicPtr<T>;

// alloc::boxed
impl<T> const Default for Box<[T]>;
impl const Default for Box<str>;

// alloc::string
impl const Default for String;

// alloc::vec
impl<T> const Default for Vec<T>;

// std::lazy
impl<T> const Default for SyncOnceCell<T>;

Steps / History

Unresolved Questions

  • None yet.
@fee1-dead fee1-dead added C-tracking-issue Category: A tracking issue for an RFC or an unstable feature. T-libs-api Relevant to the library API team, which will review and decide on the PR/issue. labels Aug 8, 2021
@jonas-schievink jonas-schievink added the F-const_trait_impl `#![feature(const_trait_impl)]` label Aug 8, 2021
fee1-dead added a commit to fee1-dead-contrib/rust that referenced this issue Apr 12, 2022
`impl const Default for Box<[T]>` and `Box<str>`

The unstable `const_default_impls` (rust-lang#87864) already include empty `Vec<T>` and `String`. Now we extend that concept to `Box<[T]>` and `Box<str>` as well.

This obviates a hack in `rustc_ast`'s `P::<[T]>::new`.
@DesmondWillowbrook
Copy link
Contributor

What's the status of this issue?

@Liamolucko
Copy link

It's dependent on #67792.

@C0D3-M4513R
Copy link

I stumbled across this pr, as I was trying to implement my own const Default implementations and ran into various errors:
https://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=36cb0ae9a38d3d57000dce3173d38df2

What am I doing wrong here?

@fee1-dead
Copy link
Member Author

See #110395.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-tracking-issue Category: A tracking issue for an RFC or an unstable feature. F-const_trait_impl `#![feature(const_trait_impl)]` T-libs-api Relevant to the library API team, which will review and decide on the PR/issue.
Projects
None yet
Development

No branches or pull requests

5 participants