Skip to content

Commit c491353

Browse files
committed
try to fix error
1 parent 69263f4 commit c491353

File tree

1 file changed

+26
-4
lines changed

1 file changed

+26
-4
lines changed

include/boost/pfr/detail/fields_count.hpp

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,20 +148,34 @@ struct ubiq_rref_base_asserting {
148148
}
149149
};
150150

151-
template <class T, std::size_t I0, std::size_t... I, class /*Enable*/ = std::enable_if_t<std::is_copy_constructible<T>::value>>
151+
template <class T, std::size_t I0, std::size_t... I, class /*Enable*/ = std::enable_if_t<std::is_copy_constructible<T>::value and !std::is_aggregate_v<T>>>
152152
constexpr auto assert_first_not_base(std::index_sequence<I0, I...>) noexcept
153153
-> std::add_pointer_t<decltype(T{ ubiq_lref_base_asserting<T>{}, ubiq_lref_constructor{I}... })>
154154
{
155155
return nullptr;
156156
}
157157

158-
template <class T, std::size_t I0, std::size_t... I, class /*Enable*/ = std::enable_if_t<!std::is_copy_constructible<T>::value>>
158+
template <class T, std::size_t I0, std::size_t... I, class /*Enable*/ = std::enable_if_t<!std::is_copy_constructible<T>::value and !std::is_aggregate_v<T>>>
159159
constexpr auto assert_first_not_base(std::index_sequence<I0, I...>) noexcept
160160
-> std::add_pointer_t<decltype(T{ ubiq_rref_base_asserting<T>{}, ubiq_rref_constructor{I}... })>
161161
{
162162
return nullptr;
163163
}
164164

165+
template <class T, std::size_t I0, std::size_t... I, class /*Enable*/ = std::enable_if_t<std::is_copy_constructible<T>::value and std::is_aggregate_v<T>>>
166+
constexpr auto assert_first_not_base(std::index_sequence<I0, I...>) noexcept
167+
-> std::add_pointer_t<decltype(T{ ubiq_lref_base_asserting<T>{}, {ubiq_lref_constructor{I}}... })>
168+
{
169+
return nullptr;
170+
}
171+
172+
template <class T, std::size_t I0, std::size_t... I, class /*Enable*/ = std::enable_if_t<!std::is_copy_constructible<T>::value and std::is_aggregate_v<T>>>
173+
constexpr auto assert_first_not_base(std::index_sequence<I0, I...>) noexcept
174+
-> std::add_pointer_t<decltype(T{ ubiq_rref_base_asserting<T>{}, {ubiq_rref_constructor{I}}... })>
175+
{
176+
return nullptr;
177+
}
178+
165179
template <class T>
166180
constexpr void* assert_first_not_base(std::index_sequence<>) noexcept
167181
{
@@ -180,14 +194,22 @@ constexpr auto assert_first_not_base(long) noexcept
180194

181195
///////////////////// Helpers for initializable detection
182196
// 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>>
197+
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>>>
184198
constexpr auto enable_if_initializable_helper(std::index_sequence<I...>) noexcept
185199
-> std::add_pointer_t<decltype(T{ubiq_lref_constructor{I}...})>;
186200

187-
template <class T, std::size_t... I, class /*Enable*/ = std::enable_if_t<!std::is_copy_constructible<T>::value>>
201+
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>>>
188202
constexpr auto enable_if_initializable_helper(std::index_sequence<I...>) noexcept
189203
-> std::add_pointer_t<decltype(T{ubiq_rref_constructor{I}...})>;
190204

205+
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>>>
206+
constexpr auto enable_if_initializable_helper(std::index_sequence<I...>) noexcept
207+
-> std::add_pointer_t<decltype(T{{ubiq_lref_constructor{I}}...})>;
208+
209+
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>>>
210+
constexpr auto enable_if_initializable_helper(std::index_sequence<I...>) noexcept
211+
-> std::add_pointer_t<decltype(T{{ubiq_rref_constructor{I}}...})>;
212+
191213
template <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>()))>
192214
using enable_if_initializable_helper_t = U;
193215

0 commit comments

Comments
 (0)