constexpr" marker for destroy/destroy_nSection: 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 {
[…]
// 26.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>
constexpr void destroy(ExecutionPolicy&& exec, // see 26.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>
constexpr ForwardIterator destroy_n(ExecutionPolicy&& exec, // see 26.3.5 [algorithms.parallel.overloads]
ForwardIterator first, Size n);
[…]
}