please, can we just forget the `U *buf; x = *((T *)&buf[0])` antipattern exists...
found yet another (notable, with lots of revdeps) project whose new release fails to build (rightfully so) under clang; subsequently i found a pull request that "fixes" the build by changing it to `*(T *)(void *)&buf[0]` that was merged by upstream
it's UB, it's wrong, it *will* miscompile and wreak havoc
just use memcpy
you will certainly not regret using memcpy
memcpy is your friend
(it also looks better)