| Home | Libraries | People | FAQ | More

## exchange

### Authors

- Glen Fernandes

### Overview

The header <boost/core/exchange.hpp> provides the function template `boost::exchange` which is an implementation of the `std::exchange` function introduced in C++14. `boost::exchange(o, v)` replaces the value of `o` with `v` and returns the old value of `o`.

### Examples

The following example shows `boost::exchange` used to simplify the implementation of a move constructor.

    Node(Node&& other)
      : head_(boost::exchange(other.head_, nullptr))
      , tail_(boost::exchange(other.tail_, nullptr)) { }

### Reference

    namespace boost {
      template<class T, class U = T>
      constexpr T exchange(T& t, U&& u);
    }

#### Functions

`template<class T, class U = T> constexpr T exchange(T& t, U&& u);`

Equivalent to:

    T v = std::move(t);
    t = std::forward<U>(u);
    return v;