]> git.lizzy.rs Git - rust.git/blob - tests/ui/generic-associated-types/issue-91139.rs
Rollup merge of #103702 - WaffleLapkin:lift-sized-bounds-from-pointer-methods-where...
[rust.git] / tests / ui / generic-associated-types / issue-91139.rs
1 trait Foo<T> {
2     type Type<'a>
3     where
4         T: 'a;
5 }
6
7 impl<T> Foo<T> for () {
8     type Type<'a> = ()
9     where
10         T: 'a;
11 }
12
13 fn foo<T>() {
14     let _: for<'a> fn(<() as Foo<T>>::Type<'a>, &'a T) = |_, _| ();
15     //~^ ERROR `T` does not live long enough
16     //~| ERROR `T` does not live long enough
17     //
18     // FIXME: This error is bogus, but it arises because we try to validate
19     // that `<() as Foo<T>>::Type<'a>` is valid, which requires proving
20     // that `T: 'a`. Since `'a` is higher-ranked, this becomes
21     // `for<'a> T: 'a`, which is not true. Of course, the error is bogus
22     // because there *ought* to be an implied bound stating that `'a` is
23     // not any lifetime but specifically
24     // "some `'a` such that `<() as Foo<T>>::Type<'a>" is valid".
25 }
26
27 pub fn main() {}