Feature gate: #![feature(clone_from_ref)]
This is a tracking issue for Box::clone_from_ref, Arc::clone_from_ref, and Rc::clone_from_ref. try_* and *_in functions are under this tracking issue as well as allocator_api.
Allows creating a Box<T>/Rc<T>/Arc<T> by cloning from a &T where T: CloneToUninit. Notably, these work even when T is unsized (e.g. a slice).
Public API
// alloc::boxed
impl<T: ?Sized + CloneToUninit> Box<T> {
pub fn clone_from_ref(val: &T) -> Box<T>;
// also under feature(allocator_api)
pub fn try_clone_from_ref(val: &T) -> Result<Box<T>, AllocError>;
}
impl<T: ?Sized + CloneToUninit, A: Allocator> Box<T, A> {
// also under feature(allocator_api)
pub fn clone_from_ref_in(val: &T, alloc: A) -> Box<T, A>;
// also under feature(allocator_api)
pub fn try_clone_from_ref_in(val: &T, alloc: A) -> Result<Box<T, A>, AllocError>;
}
// alloc::rc
impl<T: ?Sized + CloneToUninit> Rc<T> {
pub fn clone_from_ref(val: &T) -> Rc<T>;
// also under feature(allocator_api)
pub fn try_clone_from_ref(val: &T) -> Result<Rc<T>, AllocError>;
}
impl<T: ?Sized + CloneToUninit, A: Allocator> Rc<T, A> {
// also under feature(allocator_api)
pub fn clone_from_ref_in(val: &T, alloc: A) -> Rc<T, A>;
// also under feature(allocator_api)
pub fn try_clone_from_ref_in(val: &T, alloc: A) -> Result<Rc<T, A>, AllocError>;
}
// alloc::sync
impl<T: ?Sized + CloneToUninit> Arc<T> {
pub fn clone_from_ref(val: &T) -> Arc<T>;
// also under feature(allocator_api)
pub fn try_clone_from_ref(val: &T) -> Result<Arc<T>, AllocError>;
}
impl<T: ?Sized + CloneToUninit, A: Allocator> Arc<T, A> {
// also under feature(allocator_api)
pub fn clone_from_ref_in(val: &T, alloc: A) -> Arc<T, A>;
// also under feature(allocator_api)
pub fn try_clone_from_ref_in(val: &T, alloc: A) -> Result<Arc<T, A>, AllocError>;
}
Steps / History
(Remember to update the S-tracking-* label when checking boxes.)
Unresolved Questions
Feature gate:
#![feature(clone_from_ref)]This is a tracking issue for
Box::clone_from_ref,Arc::clone_from_ref, andRc::clone_from_ref.try_*and*_infunctions are under this tracking issue as well asallocator_api.Allows creating a
Box<T>/Rc<T>/Arc<T>by cloning from a&TwhereT: CloneToUninit. Notably, these work even whenTis unsized (e.g. a slice).Public API
Steps / History
(Remember to update the
S-tracking-*label when checking boxes.)Box::new_from_reffor making aBox<T>from a&TwhereT: CloneToUninit + ?Sized(andRcandArc) libs-team#483Box::clone_from_refand similar underfeature(clone_from_ref)#149079Unresolved Questions
Footnotes
https://std-dev-guide.rust-lang.org/feature-lifecycle/stabilization.html ↩