-
-
Notifications
You must be signed in to change notification settings - Fork 14.2k
Description
e.g., this should work:
let x: &mut [int] = &mut [1, 2, 3, 4, 5];
let y = x[1..2];
Currently, it does not find the Slice trait for &mut [T]. That is because both the Slice and SliceMut traits are implemented for [T]. SliceMut methods take self as &mut self whereas Slice methods are & self. We do no coercions when looking up methods for overloaded operators, so we don't do the &mut [T] -> &[T] coercion we would do when doing a normal trait method search.
We have three options:
1 leave as is, this seems surprising and unergonomic;
2 do a special &mut -> & coercion when searching for slice methods. I suspect we want something similar for Index etc. when we implement those in a DST-ish way;
3 allow proper coercions when desugaring Index, Slice, etc. - this is potentially complicated.
I prefer option 3, but I have not thought through the repercussions.