This repository was archived by the owner on May 28, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 4 files changed +101
-0
lines changed
src/test/ui/generic-associated-types Expand file tree Collapse file tree 4 files changed +101
-0
lines changed Original file line number Diff line number Diff line change
1
+ #![feature(generic_associated_types)]
2
+ #![feature(type_alias_impl_trait)]
3
+
4
+ fn main() {}
5
+
6
+ trait A<'a> {
7
+ type B<'b>: Clone
8
+ // FIXME(generic_associated_types): Remove one of the below bounds
9
+ // https://github.com/rust-lang/rust/pull/90678#discussion_r744976085
10
+ where
11
+ 'a: 'b, Self: 'a, Self: 'b;
12
+
13
+ fn a(&'a self) -> Self::B<'a>;
14
+ }
15
+
16
+ struct C;
17
+
18
+ impl<'a> A<'a> for C {
19
+ type B<'b> = impl Clone;
20
+ //~^ ERROR: lifetime bound not satisfied
21
+ //~| ERROR: could not find defining uses
22
+
23
+ fn a(&'a self) -> Self::B<'a> {} //~ ERROR: non-defining opaque type use in defining scope
24
+ }
Original file line number Diff line number Diff line change
1
+ error[E0478]: lifetime bound not satisfied
2
+ --> $DIR/issue-88595.rs:19:5
3
+ |
4
+ LL | type B<'b> = impl Clone;
5
+ | ^^^^^^^^^^^^^^^^^^^^^^^^
6
+ |
7
+ note: lifetime parameter instantiated with the lifetime `'a` as defined here
8
+ --> $DIR/issue-88595.rs:18:6
9
+ |
10
+ LL | impl<'a> A<'a> for C {
11
+ | ^^
12
+ note: but lifetime parameter must outlive the lifetime `'b` as defined here
13
+ --> $DIR/issue-88595.rs:19:12
14
+ |
15
+ LL | type B<'b> = impl Clone;
16
+ | ^^
17
+
18
+ error: non-defining opaque type use in defining scope
19
+ --> $DIR/issue-88595.rs:23:23
20
+ |
21
+ LL | fn a(&'a self) -> Self::B<'a> {}
22
+ | ^^^^^^^^^^^
23
+ |
24
+ note: lifetime used multiple times
25
+ --> $DIR/issue-88595.rs:18:6
26
+ |
27
+ LL | impl<'a> A<'a> for C {
28
+ | ^^
29
+ LL | type B<'b> = impl Clone;
30
+ | ^^
31
+
32
+ error: could not find defining uses
33
+ --> $DIR/issue-88595.rs:19:18
34
+ |
35
+ LL | type B<'b> = impl Clone;
36
+ | ^^^^^^^^^^
37
+
38
+ error: aborting due to 3 previous errors
39
+
40
+ For more information about this error, try `rustc --explain E0478`.
Original file line number Diff line number Diff line change
1
+ // edition:2018
2
+
3
+ #![feature(generic_associated_types)]
4
+ #![feature(type_alias_impl_trait)]
5
+
6
+ use std::future::Future;
7
+
8
+ trait MakeFut {
9
+ type Fut<'a> where Self: 'a;
10
+ fn make_fut<'a>(&'a self) -> Self::Fut<'a>;
11
+ }
12
+
13
+ impl MakeFut for &'_ mut () {
14
+ type Fut<'a> = impl Future<Output = ()>;
15
+ //~^ ERROR: the type `&mut ()` does not fulfill the required lifetime
16
+
17
+ fn make_fut<'a>(&'a self) -> Self::Fut<'a> {
18
+ async { () }
19
+ }
20
+ }
21
+
22
+ fn main() {}
Original file line number Diff line number Diff line change
1
+ error[E0477]: the type `&mut ()` does not fulfill the required lifetime
2
+ --> $DIR/issue-90014.rs:14:5
3
+ |
4
+ LL | type Fut<'a> = impl Future<Output = ()>;
5
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6
+ |
7
+ note: type must outlive the lifetime `'a` as defined here
8
+ --> $DIR/issue-90014.rs:14:14
9
+ |
10
+ LL | type Fut<'a> = impl Future<Output = ()>;
11
+ | ^^
12
+
13
+ error: aborting due to previous error
14
+
15
+ For more information about this error, try `rustc --explain E0477`.
You can’t perform that action at this time.
0 commit comments