Rust errors / Types and traits
Rust compiler error · checked with rustc 1.99.0
Rust error E0404: expected trait, found struct `Foo`
What it meansA type that is not a trait was used in a trait position, such as a bound or impl.
What rustc prints
error[E0404]: expected trait, found struct `Foo`
--> main.rs:4:6
|
4 | impl Foo for Bar {} // error: `Foo` is not a trait
| ^^^ not a traitReal 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 type that is not a trait was used in a trait position, such as a bound or impl.
Erroneous code example:
struct Foo;
struct Bar;
impl Foo for Bar {} // error: `Foo` is not a trait
fn baz<T: Foo>(t: T) {} // error: `Foo` is not a trait
Another erroneous code example:
type Foo = Iterator<Item=String>;
fn bar<T: Foo>(t: T) {} // error: `Foo` is a type alias
Please verify that the trait's name was not misspelled or that the right identifier was used. Example:
trait Foo {
// some functions
}
struct Bar;
impl Foo for Bar { // ok!
// functions implementation
}
fn baz<T: Foo>(t: T) {} // ok!
Alternatively, you could introduce a new trait with your desired restrictions as a super trait:
trait Qux: Foo {} // Anything that implements Qux also needs to implement Foo
fn baz<T: Qux>(t: T) {} // also ok!
Finally, if you are on nightly and want to use a trait alias instead of a type alias, you should use #![feature(trait_alias)]:
#![feature(trait_alias)]
trait Foo = Iterator<Item=String>;
fn bar<T: Foo>(t: T) {} // ok!From rustc --explain E0404 (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
- E0401can't use generic parameters from outer item
- E0403the name `T` is already used for a generic parameter in this item's generic parameters
- E0405cannot find trait `SomeTrait` in this scope
- E0407method `b` is not a member of trait `Foo`
Up next
Often hit nextE0308: mismatched typesA related error from the same family.Read it next →Did this answer your question?