Rust errors / Types and traits
Rust compiler error · checked with rustc 1.99.0
Rust error E0390: cannot define inherent `impl` for primitive types
What it meansA method or constant was implemented on a primitive type.
What rustc prints
error[E0390]: cannot define inherent `impl` for primitive types --> main.rs:5:1 | 5 | impl *mut Foo {} | ^^^^^^^^^^^^^ | = help: consider using an extension trait instead
Real output of rustc 1.99.0 compiling the official example below (2021 edition). Your names and line numbers will differ; the first line is the part to match.
The compiler team's explanation
A method or constant was implemented on a primitive type.
Erroneous code example:
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:
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) {}
}From rustc --explain E0390 (1.99.0), part of the Rust project, MIT or Apache-2.0. Official page.
Related errors
- E0308mismatched types
- E0277the trait bound is not satisfied
- E0599no method named X found in the current scope
- E0433failed to resolve
- E0379functions in traits cannot be declared const
- E0380auto traits cannot have associated items
- E0391cycle detected when computing the super clauses of `FirstTrait`
- E0393the type parameter `T` must be explicitly specified
Up next
Often hit nextE0308: mismatched typesA related error from the same family.Read it next →Did this answer your question?