[](_ForwardIterator __x, _Tp* __z)
{
__internal::__invoke_if_else(
- std::is_trivial<_Tp>(), [&]() { *__z = std::move(*__x); },
+ std::conjunction<std::is_trivially_copyable<_Tp>, std::is_trivially_default_constructible<_Tp>>(),
+ [&]() { *__z = std::move(*__x); },
[&]() { ::new (std::addressof(*__z)) _Tp(std::move(*__x)); });
},
_IsVector{});
[__result, __first](_Tp* __i, _Tp* __j)
{
__invoke_if_else(
- std::is_trivial<_Tp>(), [&]() { __brick_move(__i, __j, __first + (__i - __result), _IsVector{}); },
+ std::conjunction<std::is_trivially_copyable<_Tp>, std::is_trivially_default_constructible<_Tp>>(),
+ [&]() { __brick_move(__i, __j, __first + (__i - __result), _IsVector{}); },
[&]() { __brick_move_destroy()(__i, __j, __first + (__i - __result), _IsVector{}); });
});
return __first + __m;
auto __move_values = [](_RandomAccessIterator __x, _Tp* __z)
{
__internal::__invoke_if_else(
- std::is_trivial<_Tp>(), [&]() { *__z = std::move(*__x); },
+ std::conjunction<std::is_trivially_copyable<_Tp>, std::is_trivially_default_constructible<_Tp>>(),
+ [&]() { *__z = std::move(*__x); },
[&]() { ::new (std::addressof(*__z)) _Tp(std::move(*__x)); });
};
using __is_vector = typename decltype(__dispatch_tag)::__is_vector;
return __pstl::__internal::__invoke_if_else(
- std::integral_constant < bool, std::is_trivial<_ValueType1>::value&& std::is_trivial<_ValueType2>::value > (),
+ std::conjunction<std::is_trivially_copyable<_ValueType1>, std::is_trivially_default_constructible<_ValueType1>,
+ std::is_trivially_copyable<_ValueType2>, std::is_trivially_default_constructible<_ValueType2>>(),
[&]()
{
return __pstl::__internal::__pattern_walk2_brick(
using __is_vector = typename decltype(__dispatch_tag)::__is_vector;
return __pstl::__internal::__invoke_if_else(
- std::integral_constant < bool, std::is_trivial<_ValueType1>::value&& std::is_trivial<_ValueType2>::value > (),
+ std::conjunction<std::is_trivially_copyable<_ValueType1>, std::is_trivially_default_constructible<_ValueType1>,
+ std::is_trivially_copyable<_ValueType2>, std::is_trivially_default_constructible<_ValueType2>>(),
[&]()
{
return __pstl::__internal::__pattern_walk2_brick_n(
using __is_vector = typename decltype(__dispatch_tag)::__is_vector;
return __pstl::__internal::__invoke_if_else(
- std::integral_constant < bool, std::is_trivial<_ValueType1>::value&& std::is_trivial<_ValueType2>::value > (),
+ std::conjunction<std::is_trivially_copyable<_ValueType1>, std::is_trivially_default_constructible<_ValueType1>,
+ std::is_trivially_copyable<_ValueType2>, std::is_trivially_default_constructible<_ValueType2>>(),
[&]()
{
return __pstl::__internal::__pattern_walk2_brick(
using __is_vector = typename decltype(__dispatch_tag)::__is_vector;
return __pstl::__internal::__invoke_if_else(
- std::integral_constant < bool, std::is_trivial<_ValueType1>::value&& std::is_trivial<_ValueType2>::value > (),
+ std::conjunction<std::is_trivially_copyable<_ValueType1>, std::is_trivially_default_constructible<_ValueType1>,
+ std::is_trivially_copyable<_ValueType2>, std::is_trivially_default_constructible<_ValueType2>>(),
[&]()
{
return __pstl::__internal::__pattern_walk2_brick_n(
auto __dispatch_tag = __pstl::__internal::__select_backend(__exec, __first);
- __pstl::__internal::__invoke_if_not(std::is_trivial<_ValueType>(),
+ __pstl::__internal::__invoke_if_not(std::conjunction<std::is_trivially_copyable<_ValueType>, std::is_trivially_default_constructible<_ValueType>>(),
[&]()
{
__pstl::__internal::__pattern_walk1(
auto __dispatch_tag = __pstl::__internal::__select_backend(__exec, __first);
return __pstl::__internal::__invoke_if_else(
- std::is_trivial<_ValueType>(), [&]() { return std::next(__first, __n); },
+ std::conjunction<std::is_trivially_copyable<_ValueType>, std::is_trivially_default_constructible<_ValueType>>(),
+ [&]() { return std::next(__first, __n); },
[&]()
{
return __pstl::__internal::__pattern_walk1_n(
using __is_vector = typename decltype(__dispatch_tag)::__is_vector;
__pstl::__internal::__invoke_if_else(
- std::is_trivial<_ValueType>(),
+ std::conjunction<std::is_trivially_copyable<_ValueType>, std::is_trivially_default_constructible<_ValueType>>(),
[&]()
{
__pstl::__internal::__pattern_walk_brick(
using __is_vector = typename decltype(__dispatch_tag)::__is_vector;
return __pstl::__internal::__invoke_if_else(
- std::is_trivial<_ValueType>(),
+ std::conjunction<std::is_trivially_copyable<_ValueType>, std::is_trivially_default_constructible<_ValueType>>(),
[&]()
{
return __pstl::__internal::__pattern_walk_brick_n(
T my_val;
};
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+// is_trivial is deprecated in C++26
template <typename Iterator>
-typename std::enable_if<std::is_trivial<typename std::iterator_traits<Iterator>::value_type>::value, bool>::type
+using iterator_value_type_is_trivial = std::is_trivial<
+ typename std::iterator_traits<Iterator>::value_type
+>;
+#pragma GCC diagnostic pop
+
+template <typename Iterator>
+typename std::enable_if<iterator_value_type_is_trivial<Iterator>::value, bool>::type
is_equal(Iterator first, Iterator last, Iterator d_first)
{
return std::equal(first, last, d_first);
}
template <typename Iterator>
-typename std::enable_if<!std::is_trivial<typename std::iterator_traits<Iterator>::value_type>::value, bool>::type
+typename std::enable_if<!iterator_value_type_is_trivial<Iterator>::value, bool>::type
is_equal(Iterator, Iterator, Iterator)
{
return true;