| Something other than a type or an associated type was given. |
| |
| Erroneous code example: |
| |
| ```compile_fail,E0575 |
| enum Rick { Morty } |
| |
| let _: <u8 as Rick>::Morty; // error! |
| |
| trait Age { |
| type Empire; |
| fn Mythology() {} |
| } |
| |
| impl Age for u8 { |
| type Empire = u16; |
| } |
| |
| let _: <u8 as Age>::Mythology; // error! |
| ``` |
| |
| In both cases, we're declaring a variable (called `_`) and we're giving it a |
| type. However, `<u8 as Rick>::Morty` and `<u8 as Age>::Mythology` aren't types, |
| therefore the compiler throws an error. |
| |
| `<u8 as Rick>::Morty` is an enum variant, you cannot use a variant as a type, |
| you have to use the enum directly: |
| |
| ``` |
| enum Rick { Morty } |
| |
| let _: Rick; // ok! |
| ``` |
| |
| `<u8 as Age>::Mythology` is a trait method, which is definitely not a type. |
| However, the `Age` trait provides an associated type `Empire` which can be |
| used as a type: |
| |
| ``` |
| trait Age { |
| type Empire; |
| fn Mythology() {} |
| } |
| |
| impl Age for u8 { |
| type Empire = u16; |
| } |
| |
| let _: <u8 as Age>::Empire; // ok! |
| ``` |