Open
Description
Feature gate: #![feature(clone_to_uninit)]
This is a tracking issue for CloneToUninit
and its impls. This trait backs the behavior of Rc::make_mut
and Arc::make_mut
, and likely in the future also Box::clone
.
Public API
// core::clone
pub unsafe trait CloneToUninit {
unsafe fn clone_to_uninit(&self, dst: *mut Self);
}
unsafe impl<T: Clone> CloneToUninit for T;
unsafe impl<T: Clone> CloneToUninit for [T];
// TODO:
// unsafe impl CloneToUninit for str;
// unsafe impl CloneToUninit for CStr;
// unsafe impl CloneToUninit for OsStr;
// unsafe impl CloneToUninit for Path;
Steps / History
- Implementation: Generalize
{Rc,Arc}::make_mut()
to unsized types. #116113 - CloneToUninit impls #126877
- Convert
Box::clone
to be based onCloneToUninit
- Final comment period (FCP)1
- Stabilization PR
Unresolved Questions
- Consider using
*mut ()
in the signature instead of*mut Self
. This makes CloneToUninit dyn-safe. Generalize{Rc,Arc}::make_mut()
to unsized types. #116113 (comment)