ofstream out("lol.bin", ios::binary);
Lol lol;
lol.a = 129039;
lol.b = 2012093319;
out.write((char*)&lol, sizeof(Lol));
Сам по себе указатель - тривиальный тип
но класс, содержащий указатель (и владещющий адресуемым объектом) не является тривиальным типом.
Если он владеет объектом, то, по определению (из данной вами ссылки), не может быть тривиальным, потому что у него будет нетривиальный конструктор копирования и деструктор (не рассматриваем вариант с утечкой памяти).
Именно поэтому я даже предположить не мог, что объект с указателем формально может считаться тривиальным.
std::is_trivial
. И это будет ошибкой. Оговорка - не из стандарта. ... Правильную и неправильную реализацию формализовать нельзя (без явной аттрибуции), потмоу что и тот и тот код может быть верным в зависимости от "оговорок".
а ведь ты мог бы просто согласиться с тем, что твое изложение идет с т.з. некоторой этики разработки. ... Ты оперировал на уровне некоторой смысловой надстройки над стандартом, созданной с учетом изложения стандарта.
Мне не с чем соглашаться.
Вообще, я очень надеюсь, что в стандарте это помечено как UB.