You apparently are being downvoted unfairly while you are correct. Writing to u64 then reading from u32 is undefined behavior in C++. Only reading from the last union member that was written to is defined.
Re:Goals and Priorities for C++
by danielscrubs on Friday May 22, 2020 @06:29AM
(#23270546)
Because he was using future tense, not past tense.
No, it’s illegal in C++. Use std::bit_cast.