diff options
| author | bors <bors@rust-lang.org> | 2023-01-16 19:30:08 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-01-16 19:30:08 +0000 |
| commit | 4781233a77e879e49cb5ce3c98d2abba6a6ade7a (patch) | |
| tree | f76cd2b5c3a2533b1e05547d67bcac920618020e /compiler/rustc_error_codes/src | |
| parent | 481725984b4cd94ef5c00917b01c1771b6e5299c (diff) | |
| parent | 4fb9da1db5f307b20ccc175f259079e537aff1f9 (diff) | |
| download | rust-4781233a77e879e49cb5ce3c98d2abba6a6ade7a.tar.gz rust-4781233a77e879e49cb5ce3c98d2abba6a6ade7a.zip | |
Auto merge of #106945 - matthiaskrgr:rollup-c5or8z3, r=matthiaskrgr
Rollup of 5 pull requests Successful merges: - #105954 (Update instrument-coverage.md) - #106835 (new trait solver: rebase impl substs for gats correctly) - #106912 (check -Z query-dep-graph is enabled if -Z dump-dep-graph (#106736)) - #106940 (Improve a TAIT error and add an error code plus documentation) - #106942 (Update books) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_error_codes/src')
| -rw-r--r-- | compiler/rustc_error_codes/src/error_codes.rs | 1 | ||||
| -rw-r--r-- | compiler/rustc_error_codes/src/error_codes/E0792.md | 60 |
2 files changed, 61 insertions, 0 deletions
diff --git a/compiler/rustc_error_codes/src/error_codes.rs b/compiler/rustc_error_codes/src/error_codes.rs index 24258974bb9..5c77448f908 100644 --- a/compiler/rustc_error_codes/src/error_codes.rs +++ b/compiler/rustc_error_codes/src/error_codes.rs @@ -508,6 +508,7 @@ E0787: include_str!("./error_codes/E0787.md"), E0788: include_str!("./error_codes/E0788.md"), E0790: include_str!("./error_codes/E0790.md"), E0791: include_str!("./error_codes/E0791.md"), +E0792: include_str!("./error_codes/E0792.md"), ; // E0006, // merged with E0005 // E0008, // cannot bind by-move into a pattern guard diff --git a/compiler/rustc_error_codes/src/error_codes/E0792.md b/compiler/rustc_error_codes/src/error_codes/E0792.md new file mode 100644 index 00000000000..bad2b5abfe4 --- /dev/null +++ b/compiler/rustc_error_codes/src/error_codes/E0792.md @@ -0,0 +1,60 @@ +A type alias impl trait can only have its hidden type assigned +when used fully generically (and within their defining scope). +This means + +```compile_fail,E0792 +#![feature(type_alias_impl_trait)] + +type Foo<T> = impl std::fmt::Debug; + +fn foo() -> Foo<u32> { + 5u32 +} +``` + +is not accepted. If it were accepted, one could create unsound situations like + +```compile_fail,E0792 +#![feature(type_alias_impl_trait)] + +type Foo<T> = impl Default; + +fn foo() -> Foo<u32> { + 5u32 +} + +fn main() { + let x = Foo::<&'static mut String>::default(); +} +``` + + +Instead you need to make the function generic: + +``` +#![feature(type_alias_impl_trait)] + +type Foo<T> = impl std::fmt::Debug; + +fn foo<U>() -> Foo<U> { + 5u32 +} +``` + +This means that no matter the generic parameter to `foo`, +the hidden type will always be `u32`. +If you want to link the generic parameter to the hidden type, +you can do that, too: + + +``` +#![feature(type_alias_impl_trait)] + +use std::fmt::Debug; + +type Foo<T: Debug> = impl Debug; + +fn foo<U: Debug>() -> Foo<U> { + Vec::<U>::new() +} +``` |
