Re: Placement new для инициализации примитивного типа в само
От: sergii.p  
Дата: 02.10.25 09:52
Оценка:
Здравствуйте, so5team, Вы писали:

в функции store_to не должно быть проблем. Могут быть проблемы с функцией read

typename<T>
T& read(my_union_t<T>& src) {
  return *(reinterpret_cast<T*>(src._content.data()));
}

struct Data { int i; };
Data data1{1};
my_union_t<Data> storage;
store_to(storage, data1);
std::cout << read(storage).i;
Data data2{2};
store_to(storage, data2);
std::cout << read(storage).i; // тут компилятор может закешировать и вернуть 1


Чтобы избежать этого нужен std::launder. Но если его вызывать при каждом чтении, то компилятор уже ничего оптимизировать не будет, что тоже не очень хорошо.
Отредактировано 02.10.2025 10:20 sergii.p . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.