A type that is not a trait was used in a trait position, such as a bound or impl.
Erroneous code example:
#![allow(unused)]
fn main() {
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:
#![allow(unused)]
fn main() {
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:
#![allow(unused)]
fn main() {
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:
#![allow(unused)]
fn main() {
trait Foo {}
struct Bar;
impl Foo for Bar {}
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)]:
#![allow(unused)]
#![feature(trait_alias)]
fn main() {
trait Foo = Iterator<Item=String>;
fn bar<T: Foo>(t: T) {} // ok!
}
© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/error_codes/E0404.html