Created on 2025-09-29.00:00:00 last changed 2 weeks ago
Proposed resolution:
This wording is relative to N5014.
Modify [simd.syn] as indicated:
namespace std::simd {
[…]
template<simd-vec-type V, ranges::contiguous_range R, simd-integral I, class... Flags>
requires ranges::sized_range<R> && ranges::output_range<R, typename V::value_type>
constexpr void
unchecked_scatter_to(const V& v, R&& out,
const I& indices, flags<Flags...> f = {});
template<simd-vec-type V, ranges::contiguous_range R, simd-integral I, class... Flags>
requires ranges::sized_range<R> && ranges::output_range<R, typename V::value_type>
constexpr void
unchecked_scatter_to(const V& v, R&& out, const typename I::mask_type& mask,
const I& indices, flags<Flags...> f = {});
template<simd-vec-type V, ranges::contiguous_range R, simd-integral I, class... Flags>
requires ranges::sized_range<R> && ranges::output_range<R, typename V::value_type>
constexpr void
partial_scatter_to(const V& v, R&& out,
const I& indices, flags<Flags...> f = {});
template<simd-vec-type V, ranges::contiguous_range R, simd-integral I, class... Flags>
requires ranges::sized_range<R> && ranges::output_range<R, typename V::value_type>
constexpr void
partial_scatter_to(const V& v, R&& out, const typename I::mask_type& mask,
const I& indices, flags<Flags...> f = {});
[…]
}
Modify [simd.permute.memory] as indicated:
template<simd-vec-type V, ranges::contiguous_range R, simd-integral I, class... Flags> requires ranges::sized_range<R> && ranges::output_range<R, typename V::value_type> constexpr void unchecked_scatter_to(const V& v, R&& out, const I& indices, flags<Flags...> f = {}); template<simd-vec-type V, ranges::contiguous_range R, simd-integral I, class... Flags> requires ranges::sized_range<R> && ranges::output_range<R, typename V::value_type> constexpr void unchecked_scatter_to(const V& v, R&& out, const typename I::mask_type& mask, const I& indices, flags<Flags...> f = {});-10- Let `mask` be `typename I::mask_type(true)` for the overload with no `mask` parameter.
[…]template<simd-vec-type V, ranges::contiguous_range R, simd-integral I, class... Flags> requires ranges::sized_range<R> && ranges::output_range<R, typename V::value_type> constexpr void partial_scatter_to(const V& v, R&& out, const I& indices, flags<Flags...> f = {}); template<simd-vec-type V, ranges::contiguous_range R, simd-integral I, class... Flags> requires ranges::sized_range<R> && ranges::output_range<R, typename V::value_type> constexpr void partial_scatter_to(const V& v, R&& out, const typename I::mask_type& mask, const I& indices, flags<Flags...> f = {});-13- Let `mask` be `typename I::mask_type(true)` for the overload with no `mask` parameter.
[…]
[ 2025-11-28; Resolved by LWG 4420, approved in Kona. Status changed: New → Resolved. ]
[ 2025-10-22; Reflector poll. ]
Set priority to 2 after reflector poll.
This issue is related to LWG 4420. The Constrains needs to be updated to handle conversions between float and float16_t and similar cases.
Both `simd::unchecked_scatter_to` and `simd::partial_scatter_to` are used to write a `simd::vec` into a range `R`.
However, they only require `R` to be `contiguous_range` and `sized_range`. Requiring `R` to be `output_range` is also necessary; otherwise, the `constant_range` cannot be written.| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2025-11-28 15:28:22 | admin | set | messages: + msg15771 |
| 2025-11-28 15:28:22 | admin | set | status: new -> resolved |
| 2025-10-22 12:32:36 | admin | set | messages: + msg15346 |
| 2025-10-03 15:28:25 | admin | set | messages: + msg15104 |
| 2025-09-29 00:00:00 | admin | create | |