diff options
| author | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2019-10-12 14:48:20 +0200 |
|---|---|---|
| committer | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2019-10-17 11:30:41 +0200 |
| commit | d1db077e067b00c4733512dd23f8b144a760f367 (patch) | |
| tree | e1fd9fe6d1cefb5495a77d25c475749d3e7002e1 /src | |
| parent | 7e498005a12548a8fd396312affde05c4d3ca085 (diff) | |
Add long error explanation for E0575
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_resolve/error_codes.rs | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/src/librustc_resolve/error_codes.rs b/src/librustc_resolve/error_codes.rs index ab3d95dd8ed..8ccb27078d5 100644 --- a/src/librustc_resolve/error_codes.rs +++ b/src/librustc_resolve/error_codes.rs @@ -1735,6 +1735,59 @@ match eco { ``` "##, +E0575: r##" +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! +``` +"##, + E0603: r##" A private item was used outside its scope. @@ -1862,7 +1915,6 @@ struct Foo<X = Box<Self>> { // E0427, merged into 530 // E0467, removed // E0470, removed - E0575, E0576, E0577, E0578, |
