trait TraitFoo { type Bar; } struct Foo where T: TraitFoo, { inner: T::Bar, } impl Clone for Foo where T: TraitFoo, T::Bar: Clone, { fn clone(&self) -> Self { Self { inner: self.inner.clone() } } } impl Copy for Foo {} //~^ ERROR the trait bound `T: TraitFoo` is not satisfied fn main() {}