Здравствуйте, Кодт, Вы писали:
К>Массив std::optional<T> не нравится? Хочется сэкономить на булевых флажках? Или нужна непрерывность адресов элементов?
Непрерывность не важна. Флажки занимают память, плюс будут вызваны конструкторы у эдементов optional
К>Ну заведи юнион, у которого будет первый член с тривиальным конструктором — какой-нибудь std::monostate dummy
К>К>union TrulyUnion {
К> std::monostate dummy = {};
К> T data;
К> .....
К>};
К>
В TrulyUnion всё равно придётся вводить конструктор, ведь есть хотя бы один member с не тривиальным. И деструктор тоже, ведь T с ним.
union TrulyUnion {
std::monostate dummy;
T data;
TrulyUnion() : dummy{} {}
~TrulyUnion() {}
};