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