This issue has appeared before on this board, but I'm still confused by two things. I understand that the Sized requirement comes from the implementation
impl<T: Error> Error for Box<T> { ... }
which has an implicit Sized bound on the type parameter T. What confuses me is...
Why does the error message underline a value of type Box<dyn Error> and claim it is unsized? Aren't boxes always sized?
Why is this impl not written to work for T: ?Sized?
Yes, it will be allowed because impl<E: Error> From<T> is more specific than impl<T> From<T>. We can probably have this now because the standard library is allowed to use unstable features like specialisation on stable... Whether we want to actually add it is another thing. Trait implementations also can't be made nightly-only, so adding the impl will be insta-stable.