Мне нужно хранить записи вида int tag; float vec[n] причём n может быть любым, но константным для всего хранилища.
Соответственно, есть функции для чтения и записи сигнатурой: read/write(int index, int n, int& tag, float*vec): index — номер элемента, n — размер хранимых векторов. Хранилище может быть настроено или в row-major или в column-major order, т.е. данные хранятся или как «tag1, vec1[..n], tag2, vec2[..n], ..., tagN, vecN[..n]» или как «tag1, tag2, .., tagN, vec1[..n], vec2[..n], ..., vecN[..n]»
Т.е. при наивной имплементации, я бы вроде как мог хранить всё это в std::byte*, вызывать reinterpret_cast и высчитывать нужные смещения через sizeof элементов, но что-то мне подсказывает что тут можно легко нарушить strict aliasing rule и получить UB. Как такие вещи полагается делать кошерно и переносимо?