Skip to content

Commit 1a83bea

Browse files
committed
Impl DerefPure for more std types
1 parent 96eaf55 commit 1a83bea

File tree

4 files changed

+19
-4
lines changed

4 files changed

+19
-4
lines changed

library/alloc/src/borrow.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
use core::cmp::Ordering;
66
use core::hash::{Hash, Hasher};
7-
use core::ops::Deref;
87
#[cfg(not(no_global_oom_handling))]
98
use core::ops::{Add, AddAssign};
9+
use core::ops::{Deref, DerefPure};
1010

1111
#[stable(feature = "rust1", since = "1.0.0")]
1212
pub use core::borrow::{Borrow, BorrowMut};
@@ -343,6 +343,9 @@ where
343343
}
344344
}
345345

346+
#[unstable(feature = "deref_pure_trait", issue = "87121")]
347+
unsafe impl<B: ?Sized + ToOwned> DerefPure for Cow<'_, B> where B::Owned: Borrow<B> {}
348+
346349
#[stable(feature = "rust1", since = "1.0.0")]
347350
impl<B: ?Sized> Eq for Cow<'_, B> where B: Eq + ToOwned {}
348351

library/core/src/cell.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ use crate::cmp::Ordering;
239239
use crate::fmt::{self, Debug, Display};
240240
use crate::marker::{PhantomData, Unsize};
241241
use crate::mem::{self, size_of};
242-
use crate::ops::{CoerceUnsized, Deref, DerefMut, DispatchFromDyn};
242+
use crate::ops::{CoerceUnsized, Deref, DerefMut, DerefPure, DispatchFromDyn};
243243
use crate::ptr::{self, NonNull};
244244

245245
mod lazy;
@@ -1452,6 +1452,9 @@ impl<T: ?Sized> Deref for Ref<'_, T> {
14521452
}
14531453
}
14541454

1455+
#[unstable(feature = "deref_pure_trait", issue = "87121")]
1456+
unsafe impl<T: ?Sized> DerefPure for Ref<'_, T> {}
1457+
14551458
impl<'b, T: ?Sized> Ref<'b, T> {
14561459
/// Copies a `Ref`.
14571460
///
@@ -1844,6 +1847,9 @@ impl<T: ?Sized> DerefMut for RefMut<'_, T> {
18441847
}
18451848
}
18461849

1850+
#[unstable(feature = "deref_pure_trait", issue = "87121")]
1851+
unsafe impl<T: ?Sized> DerefPure for RefMut<'_, T> {}
1852+
18471853
#[unstable(feature = "coerce_unsized", issue = "18598")]
18481854
impl<'b, T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<RefMut<'b, U>> for RefMut<'b, T> {}
18491855

library/core/src/mem/manually_drop.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::ops::{Deref, DerefMut};
1+
use crate::ops::{Deref, DerefMut, DerefPure};
22
use crate::ptr;
33

44
/// A wrapper to inhibit compiler from automatically calling `T`’s destructor.
@@ -161,3 +161,6 @@ impl<T: ?Sized> DerefMut for ManuallyDrop<T> {
161161
&mut self.value
162162
}
163163
}
164+
165+
#[unstable(feature = "deref_pure_trait", issue = "87121")]
166+
unsafe impl<T: ?Sized> DerefPure for ManuallyDrop<T> {}

library/core/src/pin.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -923,7 +923,7 @@
923923
use crate::cmp;
924924
use crate::fmt;
925925
use crate::hash::{Hash, Hasher};
926-
use crate::ops::{CoerceUnsized, Deref, DerefMut, DispatchFromDyn, Receiver};
926+
use crate::ops::{CoerceUnsized, Deref, DerefMut, DerefPure, DispatchFromDyn, Receiver};
927927

928928
#[allow(unused_imports)]
929929
use crate::{
@@ -1684,6 +1684,9 @@ impl<Ptr: DerefMut<Target: Unpin>> DerefMut for Pin<Ptr> {
16841684
}
16851685
}
16861686

1687+
#[unstable(feature = "deref_pure_trait", issue = "87121")]
1688+
unsafe impl<Ptr: DerefPure> DerefPure for Pin<Ptr> {}
1689+
16871690
#[unstable(feature = "receiver_trait", issue = "none")]
16881691
impl<Ptr: Receiver> Receiver for Pin<Ptr> {}
16891692

0 commit comments

Comments
 (0)