As indicated by Shepmaster , you are trying to implement a trait for another trait, which is not possible.
What you really want (if I assume correctly) when you implement SizedTrait , AnotherTrait should also be implemented implicitly for this type. This can be done as follows:
impl<T> AnotherTrait for T where T: SizedTrait, { fn another_me() -> Self { Self::me() } }
Now that you are implementing SizedTrait , AnotherTrait automatically implemented for this type.
struct Dummy; impl SizedTrait for Dummy { fn me() -> Self { Dummy } } fn main() { Dummy::me(); Dummy::another_me(); }
Playground
If you really need to be explicit, you can also write
impl<T> AnotherTrait for T where T: SizedTrait, { fn another_me() -> Self { <Self as SizedTrait>::me() } }
source share