File tree Expand file tree Collapse file tree 1 file changed +11
-1
lines changed Expand file tree Collapse file tree 1 file changed +11
-1
lines changed Original file line number Diff line number Diff line change @@ -340,8 +340,18 @@ where
340340 }
341341}
342342
343+ // `Cow<'_, T>` can only implement `DerefPure` if `<T::Owned as Borrow<T>>` (and `BorrowMut<T>`) is trusted.
344+ // For now, we restrict `DerefPure for Cow<T>` to `T: Sized` (`T as Borrow<T>` is trusted),
345+ // `str` (`String as Borrow<str>` is trusted) and `[T]` (`Vec<T> as Borrow<[T]>` is trusted).
346+ // In the future, a `BorrowPure<T>` trait analogous to `DerefPure` might generalize this.
343347#[ unstable( feature = "deref_pure_trait" , issue = "87121" ) ]
344- unsafe impl < B : ?Sized + ToOwned > DerefPure for Cow < ' _ , B > where B :: Owned : Borrow < B > { }
348+ unsafe impl < T : Clone > DerefPure for Cow < ' _ , T > { }
349+ #[ cfg( not( no_global_oom_handling) ) ]
350+ #[ unstable( feature = "deref_pure_trait" , issue = "87121" ) ]
351+ unsafe impl DerefPure for Cow < ' _ , str > { }
352+ #[ cfg( not( no_global_oom_handling) ) ]
353+ #[ unstable( feature = "deref_pure_trait" , issue = "87121" ) ]
354+ unsafe impl < T : Clone > DerefPure for Cow < ' _ , [ T ] > { }
345355
346356#[ stable( feature = "rust1" , since = "1.0.0" ) ]
347357impl < B : ?Sized > Eq for Cow < ' _ , B > where B : Eq + ToOwned { }
You can’t perform that action at this time.
0 commit comments