mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 08:13:41 +00:00
Auto merge of #85758 - petertodd:2021-revert-manuallydrop-clone-from, r=m-ou-se
Revert #85176 addition of `clone_from` for `ManuallyDrop` Forwarding `clone_from` to the inner value changes the observable behavior, as previously the inner value would *not* be dropped by the default implementation. Frankly, this is a super-niche case, so #85176 is welcome to argue the behavior should be otherwise! But if we overrride it, IMO documenting the behavior would be good. Example: https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=c5d0856686fa850c1d7ee16891014efb
This commit is contained in:
commit
7510b0ca45
@ -44,7 +44,7 @@ use crate::ptr;
|
|||||||
/// [`MaybeUninit<T>`]: crate::mem::MaybeUninit
|
/// [`MaybeUninit<T>`]: crate::mem::MaybeUninit
|
||||||
#[stable(feature = "manually_drop", since = "1.20.0")]
|
#[stable(feature = "manually_drop", since = "1.20.0")]
|
||||||
#[lang = "manually_drop"]
|
#[lang = "manually_drop"]
|
||||||
#[derive(Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
#[repr(transparent)]
|
#[repr(transparent)]
|
||||||
pub struct ManuallyDrop<T: ?Sized> {
|
pub struct ManuallyDrop<T: ?Sized> {
|
||||||
value: T,
|
value: T,
|
||||||
@ -160,16 +160,3 @@ impl<T: ?Sized> DerefMut for ManuallyDrop<T> {
|
|||||||
&mut self.value
|
&mut self.value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[stable(feature = "manually_drop", since = "1.20.0")]
|
|
||||||
impl<T: Clone> Clone for ManuallyDrop<T> {
|
|
||||||
#[inline]
|
|
||||||
fn clone(&self) -> ManuallyDrop<T> {
|
|
||||||
ManuallyDrop { value: self.value.clone() }
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
fn clone_from(&mut self, other: &Self) {
|
|
||||||
self.value.clone_from(&other.value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user