trait Tr<'a> {
type Assoc;
}
impl<'a> Tr<'a> for () {
type Assoc = ();
}
fn f() -> impl for<'a> Tr<'a, Assoc = impl Copy + 'a> {}
But I can't find a documentation of the intended semantics in this case.
From the following test it seems that it allows the existential impl Copy + 'a to be paramterized by 'a, and that's quite surprising behavior since adding a lifetime makes the test fails, which would pass otherwise.
I think we really need a decision here.
For me it would be an inconsistent and and odd behavior.
For example, if for<'a> Tr<'a, Assoc = impl Copy + 'a> allows Assoc to be paramterized by 'a, I would expect the same behavior from for<'a> Tr<'a, Assoc = impl Copy> as well! Adding a lifetime bound shouldn't change semantics in this regard.