std::pair<T1,T2>::swap
(until C++20)
Swaps first
with other.first
and second
with other.second
, as if by using std::swap ; swap(first, other.first); swap(second, other.second);.
If either selected swap
function call is ill-formed or does not swap the value of the member, the behavior is undefined.
If either selected swap
function call does not swap the value of the member, the behavior is undefined.
[edit] Parameters
[edit] Return value
(none)
[edit] Exceptions
noexcept(swap(first, other.first)) &&
noexcept(swap(second, other.second))
In the expression above, the identifier swap
is looked up in the same manner as the one used by the C++17 std::is_nothrow_swappable trait.
std::is_nothrow_swappable_v <first_type> &&
std::is_nothrow_swappable_v <second_type>
std::is_nothrow_swappable_v <const first_type> &&
std::is_nothrow_swappable_v <const second_type>
[edit] Example
#include <iostream> #include <utility> #include <string> int main() { std::pair <int, std::string > p1(10, "test"), p2; p2.swap(p1); std::cout << "(" << p2.first << ", " << p2.second << ")\n"; #if __cpp_lib_ranges_zip >= 202110L // Using the C++23 const qualified swap overload // (swap is no longer propagating pair constness) int i1 = 10, i2{}; std::string s1("test"), s2; const std::pair <int&, std::string &> r1(i1, s1), r2(i2, s2); r2.swap(r1); std::cout << "(" << i2 << ", " << s2 << ")\n"; #endif }
Possible output:
(10, test) (10, test)
[edit] Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 2456 | C++11 | the noexcept specification is ill-formed
|
made to work |