Если стандарт гласит, что он определен только для типов POD (я еще не изучал стандарт C ++ 11 подробно, поэтому я не знаю, является ли ваше утверждение правильным или нет (a) ) и вы делаете это для не POD типа, это не определенное поведение.Период.
В некоторых реализациях он может работать в некоторых средах в определенное время дня, когда планеты выровнены.Это может работать подавляющее большинство раз.Это по-прежнему не очень хорошая идея, если вы цените мобильность.
(a) После дополнительного расследования кажется, что ваш конкретный случай в порядке.Раздел 3.9 / 3 стандарта ( n3242 черновик , но я бы удивился, если бы он сильно изменился по сравнению с этим поздним черновиком) гласит:
Для любого тривиально копируемого типа T, если два указателя на T указывают на разные объекты T obj1 и obj2, где ни obj1, ни obj2 не являются подобъектом базового класса, если нижележащие байты, составляющие obj1, копируются в obj2, впоследствии obj2 будет иметь то же значение, что и obj1.
Раздел 9 определяет (на высоком уровне), что означает «тривиально копируемое»:
Тривиально копируемый класс - это класс, который:
- не имеет нетривиальныхконструкторы копирования (12.8),
- нет нетривиальных конструкторов перемещения (12.8),
- нет нетривиальных операторов присваивания копии (13.5.3, 12.8),
- нет нетривиальных операторовоператоры присваивания перемещений (13.5.3, 12.8) и
- имеют тривиальный деструктор (12.4).
с указанными разделами, более подробно описывающими каждую область, 12.8
для копирования и перемещения объектов класса и 13.5.3
для заданий.