Error code E0575
Something other than a type or an associated type was given.
Erroneous code example:
#![allow(unused)] fn main() { 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:
#![allow(unused)] fn main() { 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:
#![allow(unused)] fn main() { trait Age { type Empire; fn Mythology() {} } impl Age for u8 { type Empire = u16; } let _: <u8 as Age>::Empire; // ok! }