trait MyTrait {} struct MyStruct; impl MyTrait for MyStruct {} fn compiles1() -> Box { Box::new(MyStruct) } fn compiles2() -> Box { let value = Box::new(MyStruct); value } struct MyWrapper(A); fn compiles3() -> MyWrapper> { MyWrapper(Box::new(MyStruct)) } fn does_not_compile() -> MyWrapper> { let value = MyWrapper(Box::new(MyStruct)); value } // after talking to the discord channel: impl CoerceUnsized> for MyWrapper where T: CoerceUnsized {} fn now_it_compiles() -> MyWrapper> { let value = MyWrapper(Box::new(MyStruct)); value } // though this is not a good solution in practice, it's interesting