This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++20 status.
Section: 20.2.2 [memory.syn] Status: C++20 Submitter: Jens Maurer Opened: 2019-10-10 Last modified: 2021-02-25
Priority: 0
View all other issues in [memory.syn].
View all issues with C++20 status.
Discussion:
This issue was submitted as editorial issue cplusplus/draft#3181 but is considered non-editorial.
P0784R7, approved in Cologne, added "constexpr" markers to the overloads of destroy and destroy_n taking an ExecutionPolicy parameter. This seems to be in error; parallel algorithms should not be marked "constexpr". (None of the parallel algorithms in <algorithm> is marked "constexpr".)[2019-11 Marked as 'Ready' during Monday issue prioritization in Belfast]
Proposed resolution:
This wording is relative to N4830.
Modify 20.2.2 [memory.syn], header <memory> synopsis, as indicated:
namespace std { […] // 27.11.9 [specialized.destroy], destroy template<class T> constexpr void destroy_at(T* location); template<class ForwardIterator> constexpr void destroy(ForwardIterator first, ForwardIterator last); template<class ExecutionPolicy, class ForwardIterator>constexprvoid destroy(ExecutionPolicy&& exec, // see 27.3.5 [algorithms.parallel.overloads] ForwardIterator first, ForwardIterator last); template<class ForwardIterator, class Size> constexpr ForwardIterator destroy_n(ForwardIterator first, Size n); template<class ExecutionPolicy, class ForwardIterator, class Size>constexprForwardIterator destroy_n(ExecutionPolicy&& exec, // see 27.3.5 [algorithms.parallel.overloads] ForwardIterator first, Size n); […] }