trait Y<'a, T: ?Sized> where T: Y<'a, Self>, for<'b> >::V: Clone, for<'b> >::V: Clone, { type V: ?Sized; fn g(&self, x: &Self::V) { ::clone(x); } } impl<'a> Y<'a, u8> for u8 { type V = str; //~^ ERROR the trait bound `str: Clone` is not satisfied } fn main() { 1u8.g("abc"); }