1 #![feature(generic_associated_types)]
9 impl<T> Foo<T> for () {
16 let _: for<'a> fn(<() as Foo<T>>::Type<'a>, &'a T) = |_, _| ();
17 //~^ ERROR `T` does not live long enough
18 //~| ERROR `T` does not live long enough
19 //~| ERROR `T` does not live long enough
20 //~| ERROR `T` does not live long enough
21 //~| ERROR `T` does not live long enough
22 //~| ERROR `T` does not live long enough
23 //~| ERROR `T` does not live long enough
24 //~| ERROR `T` does not live long enough
25 //~| ERROR `T` may not live long enough
27 // FIXME: This error is bogus, but it arises because we try to validate
28 // that `<() as Foo<T>>::Type<'a>` is valid, which requires proving
29 // that `T: 'a`. Since `'a` is higher-ranked, this becomes
30 // `for<'a> T: 'a`, which is not true. Of course, the error is bogus
31 // because there *ought* to be an implied bound stating that `'a` is
32 // not any lifetime but specifically
33 // "some `'a` such that `<() as Foo<T>>::Type<'a>" is valid".