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