Consider the following code:
let boxed: Box<dyn ATrait> = Box::new(SomethingThatImplementsATrait);
let boxed2: Box<dyn ATrait> = boxed.from();
In the second line the compiler needs to find an implementation for <Box<dyn ATrait> as From<Box<dyn ATrait>>>::from
, it can either take the fully generic one from core
, or, because Box<dyn ATrait>: ATrait
, the one you have written.