std::swap
From cppreference.com
                    
                                        
                    
                    
                                                            
                    |   Defined in header  <algorithm>
  | 
(until C++11)  | 
|
|   Defined in header  <utility>
  | 
(since C++11)  | 
|
| (1) | ||
|   template< class T > void swap( T& a, T& b );  | 
(until C++11) | |
|   template< class T > void swap( T& a, T& b ) noexcept(/* see below */);  | 
 (since C++11)  (until C++20)  | 
|
|   template< class T > constexpr void swap( T& a, T& b ) noexcept(/* see below */);  | 
(since C++20) | |
| (2) | ||
|   template< class T2, std::size_t N > void swap( T2 (&a)[N], T2 (&b)[N]) noexcept(/* see below */);  | 
 (since C++11)  (until C++20)  | 
|
|   template< class T2, std::size_t N > constexpr void swap( T2 (&a)[N], T2 (&b)[N]) noexcept(/* see below */);  | 
(since C++20) | |
Exchanges the given values.
1) Swaps the values 
a and b. This overload does not participate in overload resolution unless std::is_move_constructible_v<T> && std::is_move_assignable_v<T> is true. (since C++17)2) Swaps the arrays 
a and b. In effect calls std::swap_ranges(a, a+N, b). This overload does not participate in overload resolution unless  std::is_swappable_v<T2> is true. (since C++17)Parameters
| a, b | - | the values to be swapped | 
| Type requirements | ||
 -T must meet the requirements of MoveAssignable and MoveConstructible.
 | ||
 -T2 must meet the requirements of Swappable.
 | ||
Return value
(none)
Exceptions
1) 
| 
 (none)  | 
(until C++11) | 
| 
 noexcept specification:  
 
noexcept(     std::is_nothrow_move_constructible<T>::value &&  | 
(since C++11) | 
2) 
| 
 noexcept specification:  
  The lookup for the identifier noexcept(noexcept(swap(*a, *b))) swap in the exception specification finds this function template in addition to anything found by the usual lookup rules, making the exception specification equivalent to C++17 std::is_nothrow_swappable.
 | 
(until C++17) | 
| 
 noexcept specification:  
 
noexcept(std::is_nothrow_swappable_v<T2>)  | 
(since C++17) | 
Complexity
1) Constant
2) Linear in N
Specializations
| 
 
  | 
(until C++20) | 
The expected way to make a program-defined type swappable is to provide a non-member function swap in the same namespace as the type: see Swappable for details.
The following overloads are already provided by the standard library:
|    (C++11)  | 
   specializes the std::swap algorithm   (function template)  | 
|    (C++11)  | 
   specializes the std::swap algorithm   (function template)  | 
|    (C++11)  | 
   specializes the std::swap algorithm   (function template)  | 
|    (C++11)  | 
   specializes the std::swap algorithm   (function template)  | 
|    (C++11)  | 
   specializes the std::swap algorithm   (function template)  | 
|    (C++11)  | 
   specializes the std::swap algorithm   (function template)  | 
|    specializes the std::swap algorithm  (function template)  | |
|    (C++11)  | 
   specializes the std::swap algorithm   (function template)  | 
|    specializes the std::swap algorithm   (function template)  | |
|    (C++11)  | 
   specializes the std::swap algorithm   (function template)  | 
|    specializes the std::swap algorithm   (function template)  | |
|    specializes the std::swap algorithm   (function template)  | |
|    specializes the std::swap algorithm   (function template)  | |
|    specializes the std::swap algorithm   (function template)  | |
|    specializes the std::swap algorithm   (function template)  | |
|    specializes the std::swap algorithm   (function template)  | |
|    specializes the std::swap algorithm   (function template)  | |
|    specializes the std::swap algorithm   (function template)  | |
|    specializes the std::swap algorithm   (function template)  | |
|    specializes the std::swap algorithm   (function template)  | |
|    specializes the std::swap algorithm   (function template)  | |
|    specializes the std::swap algorithm   (function template)  | |
|    specializes the std::swap algorithm   (function template)  | |
|    (C++11)  | 
   specializes the std::swap() algorithm  (function template)  | 
|    specializes the std::swap algorithm  (function template)  | |
|    specializes the std::swap algorithm  (function template)  | |
|    specializes the std::swap algorithm  (function template)  | |
|    specializes the std::swap algorithm  (function template)  | |
|    specializes the std::swap algorithm  (function template)  | |
|    specializes the std::swap algorithm  (function template)  | |
|    specializes the std::swap algorithm  (function template)  | |
|    specializes the std::swap algorithm  (function template)  | |
|    specializes the std::swap algorithm  (function template)  | |
|    (C++11)  | 
   specializes the std::swap algorithm  (function template)  | 
|    specializes the std::swap() algorithm  (function template)  | |
|    (C++11)  | 
   specializes the std::swap algorithm  (function template)  | 
|    (C++11)  | 
   specialization of std::swap for unique_lock (function template)  | 
|    (C++11)  | 
   specializes the std::swap algorithm  (function template)  | 
|    specializes the std::swap algorithm  (function template)  | |
|    (C++17)  | 
   specializes the std::swap algorithm  (function)  | 
|    (C++17)  | 
   specializes the std::swap algorithm  (function)  | 
|    (C++17)  | 
   specializes the std::swap algorithm  (function)  | 
|    swaps two paths  (function)  | 
Example
Run this code
Output:
5 3 3 5
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 2554 | C++11 |  swapping multi-dimensional arrays can never be noexcept due to name lookup problems
 | 
made to work | 
See also
|    swaps the elements pointed to by two iterators   (function template)  | |
|    swaps two ranges of elements   (function template)  | |
|    (C++14)  | 
   replaces the argument with a new value and returns its previous value   (function template)  |