123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- [/
- Copyright 2018 Glen Joseph Fernandes
- (glenjofe@gmail.com)
- Distributed under the Boost Software License, Version 1.0.
- (http://www.boost.org/LICENSE_1_0.txt)
- ]
- [section:exchange exchange]
- [simplesect Authors]
- * Glen Fernandes
- [endsimplesect]
- [section 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`.
- [endsect]
- [section 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)) { }
- ```
- [endsect]
- [section Reference]
- ```
- namespace boost {
- template<class T, class U = T>
- constexpr T exchange(T& t, U&& u);
- }
- ```
- [section 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;
- ```
- [endsect]
- [endsect]
- [endsect]
|