// check-pass trait Identity { type T; } impl Identity for T { type T = T; } trait Holds { type Q; } struct S; struct X(S); struct XHelper; impl Holds for X { type Q = XHelper; } impl Clone for X where >::T: Clone, X: Holds, { fn clone(&self) -> Self { Self(self.0.clone()) } } fn main() {}