35 lines
378 B
Rust
35 lines
378 B
Rust
|
// 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() {}
|