// check-fail // known-bug: #90950 trait Yokeable<'a>: 'static { type Output: 'a; } trait IsCovariant<'a> {} struct Yoke Yokeable<'a>> { data: Y, } // impl Yokeable<'a>> Yoke { // fn project Yokeable<'a>>( // &self, // f: for<'a> fn(>::Output, &'a (), // ) -> >::Output) -> Yoke { // unimplemented!() // } // } fn upcast(x: Yoke) -> Yoke + 'static>> where Y: for<'a> Yokeable<'a>, for<'a> >::Output: IsCovariant<'a> { // x.project(|data, _| { // Box::new(data) // }) unimplemented!() } impl<'a> Yokeable<'a> for Box + 'static> { type Output = Box + 'a>; } // this impl is mostly an example and unnecessary for the pure repro use std::borrow::*; impl<'a, T: ToOwned + ?Sized> Yokeable<'a> for Cow<'static, T> { type Output = Cow<'a, T>; } impl<'a, T: ToOwned + ?Sized> IsCovariant<'a> for Cow<'a, T> {} fn upcast_yoke(y: Yoke>) -> Yoke + 'static>> { upcast(y) } fn main() {}