@@ -56,17 +56,14 @@ using inplace_vector_internal_size_type =
5656 If<Capacity <= std::numeric_limits<uint32_t >::max(), uint32_t ,
5757 uint64_t >>>;
5858
59- template <typename T, std::size_t Capacity>
60- using inplace_vector_array_type =
61- If<!std::is_const_v<T>, std::array<T, Capacity>,
62- const std::array<std::remove_const_t <T>, Capacity>>;
63-
6459// array based storage is used so that we can satisfy constexpr requirement
6560//
6661// Selecting this storage type implies: std::is_trivial_v<T> or Capacity = 0
6762template <typename T, std::size_t Capacity>
6863struct inplace_vector_type_based_storage {
69- inplace_vector_array_type<T, Capacity> elems{};
64+ using array_type = If<!std::is_const_v<T>, std::array<T, Capacity>,
65+ const std::array<std::remove_const_t <T>, Capacity>>;
66+ array_type elems{};
7067
7168 constexpr T *begin () { return elems.data (); }
7269 constexpr const T *begin () const { return elems.data (); }
@@ -78,11 +75,11 @@ struct inplace_vector_type_based_storage {
7875// Selecting this storage type implies: !std::is_trivial_v<T> and Capacity != 0
7976template <typename T, std::size_t Capacity>
8077struct inplace_vector_bytes_based_storage {
81- alignas (T) inplace_vector_array_type <std::byte, Capacity * sizeof (T)> elems;
78+ alignas (T) std::array <std::byte, Capacity * sizeof (T)> elems;
8279
83- T *begin () { return std::launder (reinterpret_cast <const T *>(elems)); }
80+ T *begin () { return std::launder (reinterpret_cast <const T *>(elems. data () )); }
8481 const T *begin () const {
85- return std::launder (reinterpret_cast <const T *>(elems));
82+ return std::launder (reinterpret_cast <const T *>(elems. data () ));
8683 }
8784};
8885
0 commit comments