@@ -180,14 +180,22 @@ constexpr auto assert_first_not_base(long) noexcept
180180
181181// /////////////////// Helpers for initializable detection
182182// Note that these take O(N) compile time and memory!
183- template <class T , std::size_t ... I, class /* Enable*/ = std::enable_if_t <std::is_copy_constructible<T>::value>>
183+ template <class T , std::size_t ... I, class /* Enable*/ = std::enable_if_t <std::is_copy_constructible<T>::value and !std::is_aggregate_v<T> >>
184184constexpr auto enable_if_initializable_helper (std::index_sequence<I...>) noexcept
185185 -> std::add_pointer_t<decltype(T{ubiq_lref_constructor{I}...})>;
186186
187- template <class T , std::size_t ... I, class /* Enable*/ = std::enable_if_t <!std::is_copy_constructible<T>::value>>
187+ template <class T , std::size_t ... I, class /* Enable*/ = std::enable_if_t <!std::is_copy_constructible<T>::value and !std::is_aggregate_v<T> >>
188188constexpr auto enable_if_initializable_helper (std::index_sequence<I...>) noexcept
189189 -> std::add_pointer_t<decltype(T{ubiq_rref_constructor{I}...})>;
190190
191+ template <class T , std::size_t ... I, class /* Enable*/ = std::enable_if_t <std::is_copy_constructible<T>::value and std::is_aggregate_v<T>>>
192+ constexpr auto enable_if_initializable_helper (std::index_sequence<I...>) noexcept
193+ -> std::add_pointer_t<decltype(T{{ubiq_lref_constructor{I}}...})>;
194+
195+ template <class T , std::size_t ... I, class /* Enable*/ = std::enable_if_t <!std::is_copy_constructible<T>::value and std::is_aggregate_v<T>>>
196+ constexpr auto enable_if_initializable_helper (std::index_sequence<I...>) noexcept
197+ -> std::add_pointer_t<decltype(T{{ubiq_rref_constructor{I}}...})>;
198+
191199template <class T , std::size_t N, class U = std::size_t , class /* Enable*/ = decltype (detail::enable_if_initializable_helper<T>(detail::make_index_sequence<N>()))>
192200using enable_if_initializable_helper_t = U;
193201
0 commit comments