diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2023-06-27 22:10:13 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-06-27 22:10:13 +0200 |
| commit | 448d2a84179a65d52ba84b87657c03dc8a4786b8 (patch) | |
| tree | c965d4520ca13ac52d0e5aaca26f1a32045277db | |
| parent | 353dd71d73dcb5d8eff2af70caf1cc32f06006ae (diff) | |
| parent | 001b081cc1bfd24657e2dccbd9c8289f9a9d67a5 (diff) | |
Rollup merge of #112628 - gootorov:box_alloc_partialeq, r=joshtriplett
Allow comparing `Box`es with different allocators
Currently, comparing `Box`es over different allocators is not allowed:
```Rust
error[E0308]: mismatched types
--> library/alloc/tests/boxed.rs:22:20
|
22 | assert_eq!(b1, b2);
| ^^ expected `Box<{integer}, ConstAllocator>`, found `Box<{integer}, AnotherAllocator>`
|
= note: expected struct `Box<{integer}, ConstAllocator>`
found struct `Box<{integer}, AnotherAllocator>`
For more information about this error, try `rustc --explain E0308`.
error: could not compile `alloc` (test "collectionstests") due to previous error
```
This PR lifts this limitation
| -rw-r--r-- | library/alloc/src/boxed.rs | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/library/alloc/src/boxed.rs b/library/alloc/src/boxed.rs index 8ef2bac9282..fa23367593d 100644 --- a/library/alloc/src/boxed.rs +++ b/library/alloc/src/boxed.rs @@ -1319,39 +1319,56 @@ impl Clone for Box<str> { } #[stable(feature = "rust1", since = "1.0.0")] -impl<T: ?Sized + PartialEq, A: Allocator> PartialEq for Box<T, A> { +impl<T, A1, A2> PartialEq<Box<T, A2>> for Box<T, A1> +where + T: ?Sized + PartialEq, + A1: Allocator, + A2: Allocator, +{ #[inline] - fn eq(&self, other: &Self) -> bool { + fn eq(&self, other: &Box<T, A2>) -> bool { PartialEq::eq(&**self, &**other) } + #[inline] - fn ne(&self, other: &Self) -> bool { + fn ne(&self, other: &Box<T, A2>) -> bool { PartialEq::ne(&**self, &**other) } } + #[stable(feature = "rust1", since = "1.0.0")] -impl<T: ?Sized + PartialOrd, A: Allocator> PartialOrd for Box<T, A> { +impl<T, A1, A2> PartialOrd<Box<T, A2>> for Box<T, A1> +where + T: ?Sized + PartialOrd, + A1: Allocator, + A2: Allocator, +{ #[inline] - fn partial_cmp(&self, other: &Self) -> Option<Ordering> { + fn partial_cmp(&self, other: &Box<T, A2>) -> Option<Ordering> { PartialOrd::partial_cmp(&**self, &**other) } + #[inline] - fn lt(&self, other: &Self) -> bool { + fn lt(&self, other: &Box<T, A2>) -> bool { PartialOrd::lt(&**self, &**other) } + #[inline] - fn le(&self, other: &Self) -> bool { + fn le(&self, other: &Box<T, A2>) -> bool { PartialOrd::le(&**self, &**other) } + #[inline] - fn ge(&self, other: &Self) -> bool { + fn ge(&self, other: &Box<T, A2>) -> bool { PartialOrd::ge(&**self, &**other) } + #[inline] - fn gt(&self, other: &Self) -> bool { + fn gt(&self, other: &Box<T, A2>) -> bool { PartialOrd::gt(&**self, &**other) } } + #[stable(feature = "rust1", since = "1.0.0")] impl<T: ?Sized + Ord, A: Allocator> Ord for Box<T, A> { #[inline] |
