Ну а причем тут виртуальные указатели то? мы же вроде о простых типах говорили. В памяти это просто байты безо всякой магии. Если работает memcpy, то и чтение из union должно (если компилятор вообще такое позволяет)
Мы объектную модель в memcpy не ломаем, это важно. Байты объекта можно читать, но, скажем, неактивные члены юниона не объекты