| Trait objects must include the `dyn` keyword. | |
| Erroneous code example: | |
| ```edition2021,compile_fail,E0782 | |
| 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. | |
| ```edition2021 | |
| trait Foo {} | |
| fn test(arg: Box<dyn Foo>) {} // ok! | |
| ``` | |
| This used to be allowed before edition 2021, but is now an error. |