My question is the following:
If I want to copy a class type, memcpy can do it very fast. This is allowed in some situations.
We have some type traits:
What I would like to know is the exact requirements when a type will be "bitwise copyable".
My conclusion is that a type is bitwise copyable if both of is_trivally_copyable
and is_standard_layout
traits are true:
P.S.: of course, the result of memcpy must be correct. I know I could memcpy in any situation but incorrectly.
You can copy an object of type T using memcpy
when is_trivially_copyable<T>::value
is true. There is no particular need for the type to be a standard layout type. The definition of 'trivially copyable' is essentially that it's safe to do this.
An example of a class that is safe to copy with memcpy
but which is not standard layout:
struct T {
int i;
private:
int j;
};
Because this class uses different access control for different non-static data members it is not standard layout, but it is still trivially copyable.