The question relates to this post.
Some authoritative users stated that the following code breaks strict aliasing rules.
#include
However, I am never using a pointer to write data [...]
The language in the standard is more general than this; [basic.life]/7 has:
[...] a pointer that pointed to the original object, a reference that referred to the original object, or the name of the original object [...]
In your operator=
you're using an lvalue of type T
to write to data
, and in operator U
you're using a pointer of type U
to read it; where U
and T
are unrelated and not character types this is UB.
Just use memcpy
. It's guaranteed to work, and it's efficient (try it)!