Rust errors / Types and traits
Rust compiler error · checked with rustc 1.99.0
Rust error E0118: no nominal type found for inherent implementation
What it meansAn inherent implementation was defined for something which isn't a struct, enum, union, or trait object.
What rustc prints
error[E0118]: no nominal type found for inherent implementation --> main.rs:1:1 | 1 | impl<T> T { // error: no nominal type found for inherent implementation | ^^^^^^^^^ impl requires a nominal type | = note: either implement a trait on it or create a newtype to wrap it 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
An inherent implementation was defined for something which isn't a struct, enum, union, or trait object.
Erroneous code example:
impl<T> T { // error: no nominal type found for inherent implementation
fn get_state(&self) -> String {
// ...
}
}
To fix this error, please implement a trait on the type or wrap it in a struct. Example:
// we create a trait here
trait LiveLongAndProsper {
fn get_state(&self) -> String;
}
// and now you can implement it on T
impl<T> LiveLongAndProsper for T {
fn get_state(&self) -> String {
"He's dead, Jim!".to_owned()
}
}
Alternatively, you can create a newtype. A newtype is a wrapping tuple-struct. For example, NewType is a newtype over Foo in struct NewType(Foo). Example:
struct TypeWrapper<T>(T);
impl<T> TypeWrapper<T> {
fn get_state(&self) -> String {
"Fascinating!".to_owned()
}
}From rustc --explain E0118 (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
- E0116cannot define inherent `impl` for a type outside of the crate where the type is defined
- E0117only traits defined in the current crate can be implemented for types defined outside of the crate
- E0119conflicting implementations of trait for type
- E0120the `Drop` trait may only be implemented for local structs, enums, and unions
Up next
Often hit nextE0308: mismatched typesA related error from the same family.Read it next →Did this answer your question?