| #![feature(rustc_attrs)] | |
| #![rustc_variance_of_opaques] | |
| trait Bar<'a> { | |
| type Assoc: From<()>; | |
| } | |
| fn foo<'a, T: Bar<'a>>() -> impl Into<T::Assoc> { | |
| //~^ ERROR ['a: o, T: o] | |
| // captures both T and 'a invariantly | |
| () | |
| } | |
| fn foo2<'a, T: Bar<'a>>() -> impl Into<T::Assoc> + 'a { | |
| //~^ ERROR ['a: o, T: o, 'a: o] | |
| // captures both T and 'a invariantly, and also duplicates `'a` | |
| // i.e. the opaque looks like `impl Into<<T as Bar<'a>>::Assoc> + 'a_duplicated` | |
| () | |
| } | |
| fn main() {} |