I have some non-copyable type and a function that consumes and (maybe) produces it:
type Foo = Vec;
fn quux(_: Foo) -> Option {
We can write a function that temporarily moves out contents of the NotBox and puts something back in before returning it
That's because you can partially move out from the struct that you take by value. It behaves as if all fields were separate variables. That is not possible though if the struct implements Drop
, because drop
needs the whole struct to be valid, always (in case of panic).
As for providing workaround, you haven't provided enough information – especially, why baz
needs to take Box
as an argument and why quux
can't? Which functions are yours and which are part of an API you can't change? What is the real type of Foo
? Is it big?
The best workaround would be not to use Box
at all.