// build-pass // Ensures that we don't regress on "implementation is not general enough" when // normalizating under binders. Unlike `normalization-generality.rs`, this also produces // type outlives predicates that we must ignore. pub unsafe trait Yokeable<'a> { type Output: 'a; } pub struct Yoke Yokeable<'a>> { _marker: std::marker::PhantomData, } impl Yokeable<'a>> Yoke { pub fn project

( &self, _f: for<'a> fn(&>::Output, &'a ()) ->

>::Output, ) -> Yoke

where P: for<'a> Yokeable<'a>, { unimplemented!() } } pub fn slice(y: Yoke<&'static str>) -> Yoke<&'static [u8]> { y.project(move |yk, _| yk.as_bytes()) } unsafe impl<'a, T: 'static + ?Sized> Yokeable<'a> for &'static T { type Output = &'a T; } fn main() {}