diff --git a/doc/core.qbk b/doc/core.qbk index 5382bf6..0eaaf67 100644 --- a/doc/core.qbk +++ b/doc/core.qbk @@ -42,6 +42,7 @@ criteria for inclusion is that the utility component be: [include checked_delete.qbk] [include demangle.qbk] [include enable_if.qbk] +[include exchange.qbk] [include explicit_operator_bool.qbk] [include ignore_unused.qbk] [include is_same.qbk] diff --git a/doc/exchange.qbk b/doc/exchange.qbk new file mode 100644 index 0000000..5e7c5cf --- /dev/null +++ b/doc/exchange.qbk @@ -0,0 +1,62 @@ +[/ +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 provides the function template +`boost::exchange` which is an implementation of the `std::exchange` +function introduced in C++14. + +[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 + constexpr T exchange(T& t, U&& u); +} +``` +[section Functions] + +[*`template constexpr T exchange(T& t, U&& u);`] + +Equivalent to: + +``` +T v = std::move(t); +t = std::forward(u); +return v; +``` + +[endsect] + +[endsect] + +[endsect]