| A trait type has been dereferenced. |
| |
| Erroneous code example: |
| |
| ```compile_fail,E0033 |
| # trait SomeTrait { fn method_one(&self){} fn method_two(&self){} } |
| # impl<T> SomeTrait for T {} |
| let trait_obj: &SomeTrait = &"some_value"; |
| |
| // This tries to implicitly dereference to create an unsized local variable. |
| let &invalid = trait_obj; |
| |
| // You can call methods without binding to the value being pointed at. |
| trait_obj.method_one(); |
| trait_obj.method_two(); |
| ``` |
| |
| A pointer to a trait type cannot be implicitly dereferenced by a pattern. Every |
| trait defines a type, but because the size of trait implementers isn't fixed, |
| this type has no compile-time size. Therefore, all accesses to trait types must |
| be through pointers. If you encounter this error you should try to avoid |
| dereferencing the pointer. |
| |
| You can read more about trait objects in the [Trait Objects] section of the |
| Reference. |
| |
| [Trait Objects]: https://doc.rust-lang.org/reference/types.html#trait-objects |