Error code E0390
A method or constant was implemented on a primitive type.
Erroneous code example:
#![allow(unused)] fn main() { 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:
#![allow(unused)] fn main() { 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:
#![allow(unused)] fn main() { struct Foo; impl &Foo { // error: no nominal type found for inherent implementation fn bar(self, other: Self) {} } }
becomes
#![allow(unused)] fn main() { struct Foo; impl Foo { fn bar(&self, other: &Self) {} } }