The paper presented that the union has to have an empty destructor. However, to solve the triviality problem, we can just have two overloads of the destructor. And that is what we did in std::expected.
https://github.com/llvm/llvm-project/blob/0cb2fe5183c9b25bb96140c27d12b1ad4a80aa92/libcxx/include/__expected/expected.h#L250
(And we are still very keen on seeing this paper solving the issue of starting lifetime of an array)