Why does returning `Self` in trait work, but returning `Option` requires `Sized`?
There are two sets of checks happening here, which is why the difference appears confusing. Each type in the function signature is checked for validity. Option inherently requires T: Sized. A return type that doesn’t require Sized is fine: trait Works { fn foo() -> Box<Self>; } The existing answer covers this well. Any function … Read more