2023-09-07 22:00:59 -05:00
|
|
|
#![feature(rustc_attrs)]
|
|
|
|
#![rustc_variance_of_opaques]
|
|
|
|
|
|
|
|
trait Bar<'a> {
|
|
|
|
type Assoc: From<()>;
|
|
|
|
}
|
|
|
|
|
|
|
|
fn foo<'a, T: Bar<'a>>() -> impl Into<T::Assoc> {
|
2024-08-22 16:07:29 -05:00
|
|
|
//~^ ERROR ['a: o, T: o]
|
2023-09-07 22:00:59 -05:00
|
|
|
// captures both T and 'a invariantly
|
|
|
|
()
|
|
|
|
}
|
|
|
|
|
|
|
|
fn foo2<'a, T: Bar<'a>>() -> impl Into<T::Assoc> + 'a {
|
2024-08-22 16:07:29 -05:00
|
|
|
//~^ ERROR ['a: o, T: o, 'a: o]
|
2023-09-07 22:00:59 -05:00
|
|
|
// 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() {}
|