Rust errors / Types and traits
Rust compiler error · checked with rustc 1.99.0
Rust error E0782: expected a type, found a trait
What it meansTrait objects must include the dyn keyword.
What rustc prints
error[E0782]: expected a type, found a trait --> main.rs:2:18 | 2 | fn test(arg: Box<Foo>) {} // error! | ^^^ | help: you can add the `dyn` keyword if you want a trait object | 2 | fn test(arg: Box<dyn Foo>) {} // error! | +++
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
Trait objects must include the dyn keyword.
Erroneous code example:
trait Foo {}
fn test(arg: Box<Foo>) {} // error!
Trait objects are a way to call methods on types that are not known until runtime but conform to some trait.
Trait objects should be formed with Box<dyn Foo>, but in the code above dyn is left off.
This makes it harder to see that arg is a trait object and not a simply a heap allocated type called Foo.
To fix this issue, add dyn before the trait name.
trait Foo {}
fn test(arg: Box<dyn Foo>) {} // ok!
This used to be allowed before edition 2021, but is now an error.
From rustc --explain E0782 (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
- E0770the type of const parameters must not depend on other generic parameters
- E0777expected path to a trait, found literal
- E0785cannot define inherent `impl` for a dyn auto trait
- E0790cannot call associated function on trait without specifying the corresponding `impl` type
Up next
Often hit nextE0308: mismatched typesA related error from the same family.Read it next →Did this answer your question?