Feature gate: #![feature(cell_get_cloned)]
This is a tracking issue for Cell::get_cloned for T: CloneFromCopy (e.g. Rc<T>, Arc<T>, etc.).
ACP: rust-lang/libs-team#572
Public API
/// Safety: can call `Self::clone(&*ManuallyDrop::new(ptr::read(ptr_to_self)))`
#[marker]
pub unsafe trait CloneFromCell: Clone {}
// Can't do this, unsound
// unsafe impl<T: Copy> CloneFromCell for T {}
unsafe impl<T: ?Sized> CloneFromCell for Rc<T> {}
unsafe impl<T: ?Sized> CloneFromCell for Arc<T> {}
unsafe impl<T: ?Sized> CloneFromCell for rc::Weak<T> {}
unsafe impl<T: ?Sized> CloneFromCell for sync::Weak<T> {}
// basically all std types that don't have indirection:
unsafe impl<T: CloneFromCell, const N: usize> CloneFromCell for [T; N] {}
unsafe impl<T: CloneFromCell> CloneFromCell for Option<T> {}
unsafe impl<T: CloneFromCell, E: CloneFromCell> CloneFromCell for Result<T, E> {}
// ...
impl<T: CloneFromCell> Cell<T> {
pub fn get_cloned(&self) -> Self;
}
Steps / History
(Remember to update the S-tracking-* label when checking boxes.)
Unresolved Questions
cc @rust-lang/libs-api @rust-lang/lang
Feature gate:
#![feature(cell_get_cloned)]This is a tracking issue for
Cell::get_clonedforT: CloneFromCopy(e.g.Rc<T>,Arc<T>, etc.).ACP: rust-lang/libs-team#572
Public API
Steps / History
(Remember to update the
S-tracking-*label when checking boxes.)Unresolved Questions
get_clonedor move to theCloneimpl forCell? AddCell::getforRc-like shallow-copying types libs-team#572 (comment)CloneFromCopyas stated above is likely wrong.cc @rust-lang/libs-api @rust-lang/lang
Footnotes
https://std-dev-guide.rust-lang.org/feature-lifecycle/stabilization.html ↩