diff --git a/include/beman/inplace_vector/inplace_vector.hpp b/include/beman/inplace_vector/inplace_vector.hpp index 500b3f8..d708f7d 100644 --- a/include/beman/inplace_vector/inplace_vector.hpp +++ b/include/beman/inplace_vector/inplace_vector.hpp @@ -139,15 +139,17 @@ template struct trivial { constexpr ~trivial() = default; }; -template struct raw_byte_based_storage { - alignas(T) std::byte _d[sizeof(T) * N]; - constexpr T *storage_data(size_t i) noexcept { +template union raw_byte_based_storage { + T _d[N]; + constexpr raw_byte_based_storage() {} + constexpr ~raw_byte_based_storage() {} + constexpr T *storage_data(std::size_t i) noexcept { IV_EXPECT(i < N); - return reinterpret_cast(_d) + i; + return _d + i; } - constexpr const T *storage_data(size_t i) const noexcept { + constexpr const T *storage_data(std::size_t i) const noexcept { IV_EXPECT(i < N); - return reinterpret_cast(_d) + i; + return _d + i; } };