File tree 1 file changed +11
-1
lines changed
1 file changed +11
-1
lines changed Original file line number Diff line number Diff line change @@ -340,8 +340,18 @@ where
340
340
}
341
341
}
342
342
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.
343
347
#[ 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 ] > { }
345
355
346
356
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
347
357
impl < B : ?Sized > Eq for Cow < ' _ , B > where B : Eq + ToOwned { }
You can’t perform that action at this time.
0 commit comments