On Fri, 12 Jan 2024 at 18:11, Patrick Palka <ppa...@redhat.com> wrote: > > On Thu, 11 Jan 2024, Jonathan Wakely wrote: > > > Tested x86_64-linux and aarch64-linux, with TBB 2020.3 only. > > > > Reviews requested. > > > > -- >8 -- > > > > This is a step towards implementing the C++23 change P2408R5, "Ranges > > iterators as inputs to non-Ranges algorithms". C++20 random access > > iterators which do not meet the C==17RandomAccessIterator requirements > > will now be recognized by the PSTL algorithms. > > IIUC P2408R5 only relaxes the iterator requirements on non-mutating > algorithms, but presumably this patch relaxes the requirements for all > parallel algorithms? Perhaps that's safe here, not sure..
I think that technically it's UB to pass non-Cpp17Iterators to those algos (they're not constrained, they just say the argument have to meet the requirements). So I think allowing previously ill-formed programs to compile when using types that satisfy std::random_access_iterator but don't meet the Cpp17RandomAccessIterator reqs is allowed. However, that's not all this patch allows. Dispatching to the RA code for types that do meet the Cpp17ForwardIterator requirements but not the Cpp17RandomAccessIterator reqs would be a semantic change for code that was already valid and already compiled. I think it's a good change though? I'm not certain.