#ifndef RFL_INTERNAL_TUPLE_CALCULATE_POSITIONS_HPP_ #define RFL_INTERNAL_TUPLE_CALCULATE_POSITIONS_HPP_ #include namespace rfl::internal::tuple { template struct PositionWrapper {}; template struct Positions { static consteval auto to_array() { return std::array({_is..., _last}); } }; template consteval auto operator+(const Positions<_last, _is...>&, const PositionWrapper&) { if constexpr (_last % alignof(T) == 0) { constexpr auto last_new = _last + sizeof(T); return Positions{}; } else { constexpr auto last_corrected = _last + alignof(T) - (_last % alignof(T)); constexpr auto last_new = last_corrected + sizeof(T); return Positions{}; } } template consteval auto calculate_positions() { return (Positions<0>{} + ... + PositionWrapper{}).to_array(); } } // namespace rfl::internal::tuple #endif