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.