2800. constexpr swap

Section: 23.2.2 [utility.swap] Status: Open Submitter: United States Opened: 2016-11-09 Last modified: 2017-11-10

Priority: 3

View other active issues in [utility.swap].

View all other issues in [utility.swap].

View all issues with Open status.

Discussion:

Addresses US 108

swap is a critical function in the standard library, and should be declared constexpr to support more widespread support for constexpr in libraries. This was proposed in P0202R1 which was reviewed favourably at Oulu, but the widespread changes to the <algorithm> header were too risky and unproven for C++17. We should not lose constexpr support for the much simpler (and more important) <utility> functions because they were attached to a larger paper. Similarly, the fundamental value wrappers, pair and tuple, should have constexpr swap functions, and the same should be considered for optional and variant. It is not possible to mark swap for std::array as constexpr without adopting the rest of the P0202R1 though, or rewriting the specification for array swap to not use swap_ranges.

Suggested resolution:

Adopt the changes to the <utility> header proposed in P0202R1, i.e., only bullets C, D, and E. In addition, mark the swap functions of pair and tuple as constexpr, and consider doing the same for optional and variant.

[Issues Telecon 16-Dec-2016]

Priority 3

[2017-11 Albuquerque Wednesday issue processing]

Status to Open; we don't want to do this yet; gated on Core issue 1581. See also 2897.

[2017-11 Albuquerque Thursday]

It looks like 1581 is going to be resolved this week, so we should revisit soon.

Proposed resolution: