If the standard states it's only defined for POD types (I haven't examined the C++11 standard in detail yet so I don't know if your contention is correct or not (a)) and you do it for a non-POD type, it's not defined behaviour. Period.
It may work, on some implementations, in some environments at certain times of the day, when the planets are aligned. It may work the vast majority of times. That still doesn't make it a good idea if you value portability.
(a) After more investigation, it appears your particular case is okay. Section 3.9/3 of the standard (n3242 draft, but I'd be surprised if it had changed much from this late draft) states:
For any trivially copyable type T, if two pointers to T point to distinct T objects obj1 and obj2 where neither obj1 nor obj2 is a base-class subobject, if the underlying bytes making up obj1 are copied into obj2, obj2 shall subsequently hold the same value as obj1.
Section 9 defines (at a high level) what "trivially copyable" means:
A trivially copyable class is a class that:
- has no non-trivial copy constructors (12.8),
- has no non-trivial move constructors (12.8),
- has no non-trivial copy assignment operators (13.5.3, 12.8),
- has no non-trivial move assignment operators (13.5.3, 12.8), and
- has a trivial destructor (12.4).
with the referenced sections going into more detail on each area, 12.8
for copying and moving class objects and 13.5.3
for assignments.