Title
Parallel specialized memory algorithms should require forward iterators
Status
c++23
Section
[memory.syn]
Submitter
Tim Song

Created on 2021-05-16.00:00:00 last changed 5 months ago

Messages

Date: 2021-06-07.16:58:04

Proposed resolution:

This wording is relative to N4885.

  1. Modify [memory.syn], header <memory> synopsis, as indicated:

      […]
    namespace std {
      […]
    
      template<class InputIterator, class NoThrowForwardIterator>
        NoThrowForwardIterator uninitialized_copy(InputIterator first, InputIterator last,
                                                  NoThrowForwardIterator result);
      template<class ExecutionPolicy, class InputForwardIterator, class NoThrowForwardIterator>
        NoThrowForwardIterator uninitialized_copy(ExecutionPolicy&& exec, // see [algorithms.parallel.overloads]
                                                  InputForwardIterator first, InputForwardIterator last,
                                                  NoThrowForwardIterator result);
      template<class InputIterator, class Size, class NoThrowForwardIterator>
        NoThrowForwardIterator uninitialized_copy_n(InputIterator first, Size n,
                                                    NoThrowForwardIterator result);
      template<class ExecutionPolicy, class InputForwardIterator, class Size, class NoThrowForwardIterator>
        NoThrowForwardIterator uninitialized_copy_n(ExecutionPolicy&& exec, // see [algorithms.parallel.overloads]
                                                    InputForwardIterator first, Size n,
                                                    NoThrowForwardIterator result);  
      […]
    
      template<class InputIterator, class NoThrowForwardIterator>
        NoThrowForwardIterator uninitialized_move(InputIterator first, InputIterator last,
                                                  NoThrowForwardIterator result);
      template<class ExecutionPolicy, class InputForwardIterator, class NoThrowForwardIterator>
        NoThrowForwardIterator uninitialized_move(ExecutionPolicy&& exec, // see [algorithms.parallel.overloads]
                                                  InputForwardIterator first, InputForwardIterator last,
                                                  NoThrowForwardIterator result);
      template<class InputIterator, class Size, class NoThrowForwardIterator>
        pair<InputIterator, NoThrowForwardIterator>
          uninitialized_move_n(InputIterator first, Size n, NoThrowForwardIterator result);
      template<class ExecutionPolicy, class InputForwardIterator, class Size, class NoThrowForwardIterator>
        pair<InputForwardIterator, NoThrowForwardIterator>
          uninitialized_move_n(ExecutionPolicy&& exec, // see [algorithms.parallel.overloads]
                               InputForwardIterator first, Size n, NoThrowForwardIterator result);
    
      […]
    }
    
Date: 2021-06-07.00:00:00

[ 2021-06-07 Approved at June 2021 virtual plenary. Status changed: Voting → WP. ]

Date: 2021-05-15.00:00:00

[ 2021-05-20; Reflector poll ]

Set status to Tentatively Ready after six votes in favour during reflector poll.

Date: 2021-05-16.00:00:00

The parallel versions of uninitialized_{copy,move}{,_n} are currently depicted as accepting input iterators for their source range. Similar to the non-uninitialized versions, they should require the source range to be at least forward.

History
Date User Action Args
2023-11-22 15:47:43adminsetstatus: wp -> c++23
2021-06-07 16:58:04adminsetmessages: + msg11914
2021-06-07 16:58:04adminsetstatus: voting -> wp
2021-05-26 21:11:22adminsetstatus: ready -> voting
2021-05-20 08:53:38adminsetmessages: + msg11828
2021-05-20 08:53:38adminsetstatus: new -> ready
2021-05-16 11:55:05adminsetmessages: + msg11803
2021-05-16 00:00:00admincreate