operator()(_Iter __first, _Sent __last) const
{
using _ValueType = remove_reference_t<iter_reference_t<_Iter>>;
- if constexpr (is_trivial_v<_ValueType>
- && is_copy_assignable_v<_ValueType>)
+ if constexpr (is_trivially_default_constructible_v<_ValueType>
+ && is_trivially_copy_assignable_v<_ValueType>)
return ranges::fill(__first, __last, _ValueType());
else
{
operator()(_Iter __first, iter_difference_t<_Iter> __n) const
{
using _ValueType = remove_reference_t<iter_reference_t<_Iter>>;
- if constexpr (is_trivial_v<_ValueType>
- && is_copy_assignable_v<_ValueType>)
+ if constexpr (is_trivially_default_constructible_v<_ValueType>
+ && is_trivially_copy_assignable_v<_ValueType>)
return ranges::fill_n(__first, __n, _ValueType());
else
{
using _OutType = remove_reference_t<iter_reference_t<_Out>>;
if constexpr (sized_sentinel_for<_ISent, _Iter>
&& sized_sentinel_for<_OSent, _Out>
- && is_trivial_v<_OutType>
- && is_nothrow_assignable_v<_OutType&,
+ && is_trivially_constructible_v<_OutType, iter_reference_t<_Iter>>
+ && is_trivially_default_constructible_v<_OutType>
+ && is_trivially_assignable_v<_OutType&,
iter_reference_t<_Iter>>)
{
auto __d1 = __ilast - __ifirst;
{
using _OutType = remove_reference_t<iter_reference_t<_Out>>;
if constexpr (sized_sentinel_for<_Sent, _Out>
- && is_trivial_v<_OutType>
- && is_nothrow_assignable_v<_OutType&,
+ && is_trivially_constructible_v<_OutType, iter_reference_t<_Iter>>
+ && is_trivially_default_constructible_v<_OutType>
+ && is_trivially_assignable_v<_OutType&,
iter_reference_t<_Iter>>)
{
auto __d = __olast - __ofirst;
using _OutType = remove_reference_t<iter_reference_t<_Out>>;
if constexpr (sized_sentinel_for<_ISent, _Iter>
&& sized_sentinel_for<_OSent, _Out>
- && is_trivial_v<_OutType>
- && is_nothrow_assignable_v<_OutType&,
+ && is_trivially_constructible_v<_OutType, iter_rvalue_reference_t<_Iter>>
+ && is_trivially_default_constructible_v<_OutType>
+ && is_trivially_assignable_v<_OutType&,
iter_rvalue_reference_t<_Iter>>)
{
auto __d1 = __ilast - __ifirst;
{
using _OutType = remove_reference_t<iter_reference_t<_Out>>;
if constexpr (sized_sentinel_for<_Sent, _Out>
- && is_trivial_v<_OutType>
- && is_nothrow_assignable_v<_OutType&,
+ && is_trivially_constructible_v<_OutType, iter_rvalue_reference_t<_Iter>>
+ && is_trivially_default_constructible_v<_OutType>
+ && is_trivially_assignable_v<_OutType&,
iter_rvalue_reference_t<_Iter>>)
{
auto __d = __olast - __ofirst;
operator()(_Iter __first, _Sent __last, const _Tp& __x) const
{
using _ValueType = remove_reference_t<iter_reference_t<_Iter>>;
- if constexpr (is_trivial_v<_ValueType>
- && is_nothrow_assignable_v<_ValueType&, const _Tp&>)
+ if constexpr (is_trivially_constructible_v<_ValueType, const _Tp&>
+ && is_trivially_assignable_v<_ValueType&, const _Tp&>)
return ranges::fill(__first, __last, __x);
else
{
const _Tp& __x) const
{
using _ValueType = remove_reference_t<iter_reference_t<_Iter>>;
- if constexpr (is_trivial_v<_ValueType>
- && is_nothrow_assignable_v<_ValueType&, const _Tp&>)
+ if constexpr (is_trivially_constructible_v<_ValueType, const _Tp&>
+ && is_trivially_assignable_v<_ValueType&, const _Tp&>)
return ranges::fill_n(__first, __n, __x);
else
{