]> git.lizzy.rs Git - rust.git/commit
auto merge of #19167 : japaric/rust/rhs-cmp, r=aturon
authorbors <bors@rust-lang.org>
Thu, 4 Dec 2014 12:02:56 +0000 (12:02 +0000)
committerbors <bors@rust-lang.org>
Thu, 4 Dec 2014 12:02:56 +0000 (12:02 +0000)
commit6d965cc2c99787a949d38abf225412fe502d3ed8
treed8702f66ba3753eba622b978b91974a0bc913cee
parent53e8bd641a4d3495fb4ffb12e732390d9b4ff93e
parent5cfac942018b3f8e0b384c49d6564fcff25634e6
auto merge of #19167 : japaric/rust/rhs-cmp, r=aturon

Comparison traits have gained an `Rhs` input parameter that defaults to `Self`. And now the comparison operators can be overloaded to work between different types. In particular, this PR allows the following operations (and their commutative versions):

- `&str` == `String` == `CowString`
- `&[A]` == `&mut [B]` == `Vec<C>` == `CowVec<D>` == `[E, ..N]` (for `N` up to 32)
- `&mut A` == `&B` (for `Sized` `A` and `B`)

Where `A`, `B`, `C`, `D`, `E` may be different types that implement `PartialEq`. For example, these comparisons are now valid: `string == "foo"`, and `vec_of_strings == ["Hello", "world"]`.

[breaking-change]s

Since the `==` may now work on different types, operations that relied on the old "same type restriction" to drive type inference, will need to be type annotated. These are the most common fallout cases:

- `some_vec == some_iter.collect()`: `collect` needs to be type annotated: `collect::<Vec<_>>()`
- `slice == &[a, b, c]`: RHS doesn't get coerced to an slice, use an array instead `[a, b, c]`
- `lhs == []`: Change expression to `lhs.is_empty()`
- `lhs == some_generic_function()`: Type annotate the RHS as necessary

cc #19148

r? @aturon
src/libstd/collections/hash/map.rs