So we can still have generic unions, e.g.
union Foo<T: TrivialDrop> { it: T }
union Bar<T> { it: ManuallyDrop<T> }
?
I’m a bit concerned about backward compatibility, e.g. if before I had:
union Baz { it: Thing }
where Thing has drop code, and now I have:
union Baz { it: ManuallyDrop<Thing> }
then previously to run the drop code I wrote:
let x = baz.it;
// a hidden use of drop(x);
and now that code still compiles, but has different semantics, since the drop code doesn’t run. I need to update the code to be:
let ManuallyDrop(x) = baz.it;
// a hidden use of drop(x);