| A binary assignment operator like `+=` or `^=` was applied to a type that |
| doesn't support it. |
| |
| Erroneous code example: |
| |
| ```compile_fail,E0368 |
| let mut x = 12f32; // error: binary operation `<<` cannot be applied to |
| // type `f32` |
| |
| x <<= 2; |
| ``` |
| |
| To fix this error, please check that this type implements this binary |
| operation. Example: |
| |
| ``` |
| let mut x = 12u32; // the `u32` type does implement the `ShlAssign` trait |
| |
| x <<= 2; // ok! |
| ``` |
| |
| It is also possible to overload most operators for your own type by |
| implementing the `[OP]Assign` traits from `std::ops`. |
| |
| Another problem you might be facing is this: suppose you've overloaded the `+` |
| operator for some type `Foo` by implementing the `std::ops::Add` trait for |
| `Foo`, but you find that using `+=` does not work, as in this example: |
| |
| ```compile_fail,E0368 |
| use std::ops::Add; |
| |
| struct Foo(u32); |
| |
| impl Add for Foo { |
| type Output = Foo; |
| |
| fn add(self, rhs: Foo) -> Foo { |
| Foo(self.0 + rhs.0) |
| } |
| } |
| |
| fn main() { |
| let mut x: Foo = Foo(5); |
| x += Foo(7); // error, `+=` cannot be applied to the type `Foo` |
| } |
| ``` |
| |
| This is because `AddAssign` is not automatically implemented, so you need to |
| manually implement it for your type. |