File tree Expand file tree Collapse file tree 1 file changed +30
-0
lines changed
Expand file tree Collapse file tree 1 file changed +30
-0
lines changed Original file line number Diff line number Diff line change 1+ <?xml version =' 1.0' encoding =' utf-8' standalone =' no' ?>
2+ <!DOCTYPE issue SYSTEM "lwg-issue.dtd">
3+
4+ <issue num =" 4165" status =" New" >
5+ <title >Should swapping a built-in array or `std::array` with itself result in UB?</title >
6+ <section ><sref ref =" [concept.swappable]" /><sref ref =" [utility.swap]" /><sref ref =" [array.members]" /></section >
7+ <submitter >Jiang An</submitter >
8+ <date >13 Oct 2024</date >
9+ <priority >99</priority >
10+
11+ <discussion >
12+ <p >
13+ Currently, the `std::swap` overload for built-in arrays, the `swap` member function of
14+ `std::array`, the `std::swap` overload for `std::array`, and the expression-equivalent-to
15+ operation of `std::ranges::swap` for built-in arrays are specified to be equivalent to performing
16+ `std::(ranges::)swap_ranges`. As `swap_ranges` functions require that the swapped ranges shall
17+ not overlap (<sref ref =" [alg.swap]" />/2), swapping a built-in array or a nonzero-length
18+ <tt >std::array</tt > with itself results in undefined behavior.
19+ <p />
20+ It seems that no other swap operation in the standard library has precondition that both arguments
21+ don't refer to the same object. Should we make self-swapping of arrays well-defined? If so,
22+ perhaps we should change the semantics to plain loops that execute `swap` or `ranges::swap` on
23+ elements.
24+ </p >
25+ </discussion >
26+
27+ <resolution >
28+ </resolution >
29+
30+ </issue >
You can’t perform that action at this time.
0 commit comments