Instead of storing a pointer, the function copies the `VariantData`.
Benefits:
* smaller code
* no impact on programs that don't use this feature
Drawbacks:
* changes to the original variant are not always reflected on the copy
* modifying the original from the shallow copy leads to UB