constexpr swap
Section: 22.2.2 [utility.swap] Status: Resolved Submitter: United States Opened: 2016-11-09 Last modified: 2020-09-06
Priority: 3
View all other issues in [utility.swap].
View all issues with Resolved 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.
[2018-06]
Resolved by the adoption of P0879R0
Proposed resolution: