| A method or constant was implemented on a primitive type. |
| |
| Erroneous code example: |
| |
| ```compile_fail,E0390 |
| struct Foo { |
| x: i32 |
| } |
| |
| impl *mut Foo {} |
| // error: cannot define inherent `impl` for primitive types |
| ``` |
| |
| This isn't allowed, but using a trait to implement a method or constant |
| is a good solution. |
| Example: |
| |
| ``` |
| struct Foo { |
| x: i32 |
| } |
| |
| trait Bar { |
| fn bar(); |
| } |
| |
| impl Bar for *mut Foo { |
| fn bar() {} // ok! |
| } |
| ``` |
| |
| Instead of defining an inherent implementation on a reference, you could also |
| move the reference inside the implementation: |
| |
| ```compile_fail,E0390 |
| struct Foo; |
| |
| impl &Foo { // error: no nominal type found for inherent implementation |
| fn bar(self, other: Self) {} |
| } |
| ``` |
| |
| becomes |
| |
| ``` |
| struct Foo; |
| |
| impl Foo { |
| fn bar(&self, other: &Self) {} |
| } |
| ``` |