Squashed 'third_party/boostorg/multi_index/' content from commit d95a949
Change-Id: Ie67c2d797c11dc122c7f11e767e81691bf2191a4
git-subtree-dir: third_party/boostorg/multi_index
git-subtree-split: d95a94942b918140e565feb99ed36ea97c30084e
diff --git a/doc/release_notes.html b/doc/release_notes.html
new file mode 100644
index 0000000..3bffd58
--- /dev/null
+++ b/doc/release_notes.html
@@ -0,0 +1,601 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0.1 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Boost.MultiIndex Documentation - Release notes</title>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="start" href="index.html">
+<link rel="prev" href="future_work.html">
+<link rel="up" href="index.html">
+<link rel="next" href="acknowledgements.html">
+</head>
+
+<body>
+<h1><img src="../../../boost.png" alt="boost.png (6897 bytes)" align=
+"middle" width="277" height="86">Boost.MultiIndex Release notes</h1>
+
+<div class="prev_link"><a href="future_work.html"><img src="prev.gif" alt="future work" border="0"><br>
+Future work
+</a></div>
+<div class="up_link"><a href="index.html"><img src="up.gif" alt="index" border="0"><br>
+Index
+</a></div>
+<div class="next_link"><a href="acknowledgements.html"><img src="next.gif" alt="acknowledgements" border="0"><br>
+Acknowledgements
+</a></div><br clear="all" style="clear: all;">
+
+<hr>
+
+<h2>Contents</h2>
+
+<ul>
+ <li><a href="#boost_1_68">Boost 1.68 release</a></li>
+ <li><a href="#boost_1_67">Boost 1.67 release</a></li>
+ <li><a href="#boost_1_66">Boost 1.66 release</a></li>
+ <li><a href="#boost_1_64">Boost 1.64 release</a></li>
+ <li><a href="#boost_1_62">Boost 1.62 release</a></li>
+ <li><a href="#boost_1_60">Boost 1.60 release</a></li>
+ <li><a href="#boost_1_59">Boost 1.59 release</a></li>
+ <li><a href="#boost_1_58">Boost 1.58 release</a></li>
+ <li><a href="#boost_1_57">Boost 1.57 release</a></li>
+ <li><a href="#boost_1_56">Boost 1.56 release</a></li>
+ <li><a href="#boost_1_55">Boost 1.55 release</a></li>
+ <li><a href="#boost_1_54">Boost 1.54 release</a></li>
+ <li><a href="#boost_1_49">Boost 1.49 release</a></li>
+ <li><a href="#boost_1_48">Boost 1.48 release</a></li>
+ <li><a href="#boost_1_47">Boost 1.47 release</a></li>
+ <li><a href="#boost_1_44">Boost 1.44 release</a></li>
+ <li><a href="#boost_1_43">Boost 1.43 release</a></li>
+ <li><a href="#boost_1_42">Boost 1.42 release</a></li>
+ <li><a href="#boost_1_41">Boost 1.41 release</a></li>
+ <li><a href="#boost_1_38">Boost 1.38 release</a></li>
+ <li><a href="#boost_1_37">Boost 1.37 release</a></li>
+ <li><a href="#boost_1_36">Boost 1.36 release</a></li>
+ <li><a href="#boost_1_35">Boost 1.35 release</a></li>
+ <li><a href="#boost_1_34">Boost 1.34 release</a></li>
+ <li><a href="#boost_1_33_1">Boost 1.33.1 release</a></li>
+ <li><a href="#boost_1_33">Boost 1.33 release</a></li>
+</ul>
+
+<h2><a name="boost_1_68">Boost 1.68 release</a></h2>
+
+<p>
+<ul>
+ <li>Containers of moveable but non-copyable elements can now be serialized
+ (ticket <a href="https://svn.boost.org/trac10/ticket/13478">#13478</a>).
+ Thanks to Sébastien Paris for the report.
+ </li>
+ <li><code>multi_index_container</code>'s default constructor is no longer
+ <code>explicit</code>
+ (ticket <a href="https://svn.boost.org/trac10/ticket/13518">#13518</a>).
+ </li>
+</ul>
+</p>
+
+<h2><a name="boost_1_67">Boost 1.67 release</a></h2>
+
+<p>
+<ul>
+ <li>Elements with overloaded <code>operator&</code> are now fully accepted
+ (ticket <a href="https://svn.boost.org/trac10/ticket/13307">#13307</a>).
+ Thanks to Daniel Frey for his updating
+ <a href="../../utility/operators.htm#deref">Boost.Operators</a> to help
+ fix this issue.
+ </li>
+ <li>Avoided usage of <code>std::allocator</code> members deprecated in C++17.
+ Contributed by Daniela Engert.
+ </li>
+ <li>Maintenance fixes.</li>
+</ul>
+</p>
+
+<h2><a name="boost_1_66">Boost 1.66 release</a></h2>
+
+<p>
+<ul>
+ <li>Made <code>modify</code> and <code>modify_key</code> more robust so that
+ the modified element is erased if the modifier throws or the rollback
+ functor does not properly restore the element (full discussion at
+ ticket <a href="https://svn.boost.org/trac/boost/ticket/12542">#12542</a>).
+ This is technically backwards incompatible; for instance, the following code:
+<blockquote><pre>
+<span class=identifier>c</span><span class=special>.</span><span class=identifier>modify</span><span class=special>(</span><span class=identifier>c</span><span class=special>.</span><span class=identifier>begin</span><span class=special>(),[](</span><span class=keyword>auto</span><span class=special>&){</span><span class=keyword>throw</span> <span class=number>0</span><span class=special>;});</span>
+</pre></blockquote>
+ keeps the container <code>c</code> untouched in former versions of Boost whereas
+ now <code>c.begin()</code> is erased. Thanks to Jon Kalb for raising the issue.
+ </li>
+ <li>Maintenance fixes.</li>
+</ul>
+</p>
+
+<h2><a name="boost_1_64">Boost 1.64 release</a></h2>
+
+<p>
+<ul>
+ <li>Fixed a bug related to ambiguous references in the presence of more than
+ one ranked index
+ (ticket <a href="https://svn.boost.org/trac/boost/ticket/12955">#12955</a>).
+ </li>
+ <li>Maintenance fixes.</li>
+</ul>
+</p>
+
+<h2><a name="boost_1_62">Boost 1.62 release</a></h2>
+
+<p>
+<ul>
+ <li>Maintenance fixes.</li>
+</ul>
+</p>
+
+<h2><a name="boost_1_60">Boost 1.60 release</a></h2>
+
+<p>
+<ul>
+ <li>Fixed an interoperability problem with <a href="http://www.qt.io/">Qt</a> due to the
+ optional definition of a macro with name <code>foreach</code> in this framework.</li>
+ <li>Maintenance fixes.</li>
+</ul>
+</p>
+
+<h2><a name="boost_1_59">Boost 1.59 release</a></h2>
+
+<p>
+<ul>
+ <li>Added <a href="tutorial/indices.html#rnk_indices">ranked indices</a>.</li>
+ <li>Maintenance fixes.</li>
+</ul>
+</p>
+
+<h2><a name="boost_1_58">Boost 1.58 release</a></h2>
+
+<p>
+<ul>
+ <li>The efficiency of lookup operations has improved in situations where they involve
+ the generation of temporary values of <code>key_type</code>. Consider for instance
+ the following code:
+<blockquote><pre>
+<span class=keyword>typedef</span> <span class=identifier>multi_index_container</span><span class=special><</span>
+ <span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span><span class=special>,</span>
+ <span class=identifier>indexed_by</span><span class=special><</span>
+ <span class=identifier>ordered_unique</span><span class=special><</span><span class=identifier>identity</span><span class=special><</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span><span class=special>></span> <span class=special>></span>
+ <span class=special>></span>
+<span class=special>></span> <span class=identifier>multi_t</span><span class=special>;</span>
+<span class=special>...</span>
+<span class=identifier>multi_t</span> <span class=identifier>m</span><span class=special>=...;</span>
+<span class=identifier>m</span><span class=special>.</span><span class=identifier>find</span><span class=special>(</span><span class=string>"boost"</span><span class=special>);</span> <span class=comment>// passed a const char*, not a std::string</span>
+</pre></blockquote>
+ In previous versions of the library, the <code>find</code> operation generates
+ several temporary <code>std::string</code>s (one every time an internal comparison is made).
+ In sufficiently advanced compilers, this is now avoided so that only one temporary is
+ created.
+ </li>
+ <li>Maintenance fixes.</li>
+</ul>
+</p>
+
+<h2><a name="boost_1_57">Boost 1.57 release</a></h2>
+
+<p>
+<ul>
+ <li>When <code>std::tuple</code>s are available, these can be used for lookup operations
+ in indices equipped with composite keys. <code>boost::tuple</code>s are also supported
+ for backwards compatibility.
+ </li>
+</ul>
+</p>
+
+<h2><a name="boost_1_56">Boost 1.56 release</a></h2>
+
+<p>
+<ul>
+ <li>The <code>erase(iterator)</code> member function of hashed indices
+ used to have poor performance under low load conditions due to the requirement
+ that an iterator to the next element must be returned (see ticket
+ <a href="https://svn.boost.org/trac/boost/ticket/4264">#4264</a>). In accordance with
+ the resolution of <a href="http://lwg.github.io/issues/lwg-closed.html#579">LWG
+ issue #579</a>, this problem has been fixed while maintaining the interface of
+ <code>erase</code>, at the expense of using one more
+ word of memory per element. In fact, C++ complexity requirements on unordered
+ associative containers have been improved for hashed indices so that
+ <ul>
+ <li>deletion of a given element is unconditionally constant-time,</li>
+ <li>worst-case performance is not <code>O(n)</code> but <code>O(n<sub>dist</sub>)</code>,
+ where <code>n<sub>dist</sub></code> is the number of non-equivalent elements in the index.
+ </li>
+ </ul>
+ Due to the fact that hashed indices rely on a new data structure, the internal representation of
+ their iterators and local iterators have changed, which affects serialization: their corresponding
+ serialization <a href="../../serialization/doc/tutorial.html#versioning">class version</a> has been
+ bumped from 0 to 1. Old archives involving hashed index (local) iterators can be loaded
+ by Boost 1.56 version of Boost.MultiIndex, but not the other way around.
+ </li>
+ <li>Hashed indices now provide <code>reserve</code>.</li>
+ <li>Hashed indices can now be checked for equality and inequality following the
+ (suitably adapted) C++ standard specification in <b>[unord.req]</b>.</li>
+ <li>The public interface of Boost.MultiIndex provide <code>noexcept</code> specifications
+ where appropriate (for compliant compilers).
+ </li>
+ <li>Improved performance of failed insertions into a <code>multi_index_container</code>.</li>
+ <li>Much internal code aimed at supporting MSVC++ 7.0 and prior has been removed.
+ Compilation times without this legacy code might be slightly faster.
+ </li>
+ <li>Fixed a bug with insertion via iterators dereferencing to rvalues
+ (ticket <a href="https://svn.boost.org/trac/boost/ticket/9665">#9665</a>).
+ </li>
+ <li>Made Boost.MultiIndex compatible with <code>BOOST_BIND_NO_PLACEHOLDERS</code>
+ (ticket <a href="https://svn.boost.org/trac/boost/ticket/9798">#9798</a>).
+ </li>
+ <li>Maintenance fixes.</li>
+</ul>
+</p>
+
+<h2><a name="boost_1_55">Boost 1.55 release</a></h2>
+
+<p>
+<ul>
+ <li>Boost.MultiIndex has been brought to a higher level of compliance
+ with C++11.
+ <ul>
+ <li><code>multi_index_container</code> is now efficiently movable.</li>
+ <li>Initializer lists supported.</li>
+ <li>Emplace functions provided.</li>
+ <li>Non-copyable elements (such as <code>std::unique_ptr<T></code>) supported. This includes
+ insertion of a range [<code>first</code>,<code>last</code>) where the iterators point to a type that is
+ convertible to that of the element: no copy construction happens in the process.
+ </li>
+ <li>Random access indices provide <code>shrink_to_fit()</code>.</li>
+ </ul>
+ Refer to the <a href="compiler_specifics.html">compiler specifics</a> section for limitations
+ on pre-C++11 compilers.
+ </li>
+ <li>The following classes are deprecated:
+ <ul>
+ <li><a href="reference/key_extraction.html#member_offset"><code>member_offset</code></a>,</li>
+ <li><a href="reference/key_extraction.html#const_mem_fun_explicit"><code>const_mem_fun_explicit</code></a>,</li>
+ <li><a href="reference/key_extraction.html#const_mem_fun_explicit"><code>mem_fun_explicit</code></a>,</li>
+ <li><a href="reference/key_extraction.html#composite_key_result_equal_to"><code>composite_key_result_equal_to</code></a>,</li>
+ <li><a href="reference/key_extraction.html#composite_key_result_less"><code>composite_key_result_less</code></a>,</li>
+ <li><a href="reference/key_extraction.html#composite_key_result_greater"><code>composite_key_result_greater</code></a>,</li>
+ <li><a href="reference/key_extraction.html#composite_key_result_hash"><code>composite_key_result_hash</code></a>.</li>
+ </ul>
+ </li>
+ <li>Maintenance fixes.</li>
+</ul>
+</p>
+
+<h2><a name="boost_1_54">Boost 1.54 release</a></h2>
+
+<p>
+<ul>
+ <li>Suppressed some potential warnings described in
+ tickets <a href="https://svn.boost.org/trac/boost/ticket/8034">#8034</a> and <a href="https://svn.boost.org/trac/boost/ticket/8129">#8129</a>.
+ </li>
+ <li>Maintenance fixes.</li>
+</ul>
+</p>
+
+<h2><a name="boost_1_49">Boost 1.49 release</a></h2>
+
+<p>
+<ul>
+ <li>Suppressed a potential narrow conversion warning described in
+ ticket <a href="https://svn.boost.org/trac/boost/ticket/3365">#3365</a>.
+ </li>
+</ul>
+</p>
+
+<h2><a name="boost_1_48">Boost 1.48 release</a></h2>
+
+<p>
+<ul>
+ <li>Fixed a compatibility problem with
+ <a href="../../../doc/html/foreach.html">Boost.Foreach</a>
+ (ticket <a href="https://svn.boost.org/trac/boost/ticket/5741">#5741</a>).
+ </li>
+</ul>
+</p>
+
+<h2><a name="boost_1_47">Boost 1.47 release</a></h2>
+
+<p>
+<ul>
+ <li>Fixed an ADL problem in
+ <a href="reference/key_extraction.html#composite_key_compare"><code>composite_key_compare</code></a>
+ related with <a href="../../../doc/html/ref.html">Boost.Ref</a>.
+ </li>
+ <li>Maintenance fixes.</li>
+</ul>
+</p>
+
+<h2><a name="boost_1_44">Boost 1.44 release</a></h2>
+
+<p>
+<ul>
+ <li>
+ Fixed a bug preventing the use of <code>modify_key</code> with
+ rollback in <a href="reference/ord_indices.html#modify_key">ordered</a> and
+ <a href="reference/hash_indices.html#modify_key">hashed</a> indices when
+ <code>Modifier</code> and <code>Rollback</code> are different types
+ (ticket <a href="https://svn.boost.org/trac/boost/ticket/4130">#4130</a>).
+ </li>
+</ul>
+</p>
+
+<h2><a name="boost_1_43">Boost 1.43 release</a></h2>
+
+<p>
+<ul>
+ <li>
+ <a href="../../serialization/doc/serialization.html#constructors">Serialization
+ of non default constructible values</a> is now properly supported
+ through user-provided facilities <code>save_construct_data</code> and
+ <code>load_construct_data</code>.
+ <code>multi_index_container</code> serialization
+ <a href="../../serialization/doc/tutorial.html#versioning">class version</a> has been
+ bumped from 1 to 2.
+ </li>
+</ul>
+</p>
+
+<h2><a name="boost_1_42">Boost 1.42 release</a></h2>
+
+<p>
+<ul>
+ <li>Maintenance fixes.</li>
+</ul>
+</p>
+
+<h2><a name="boost_1_41">Boost 1.41 release</a></h2>
+<p>
+<ul>
+ <li>Serialization now uses the portable
+ <a href="../../serialization/doc/wrappers.html#collection_size_type"><code>collection_size_type</code></a>
+ type instead of the original <code>std::size_t</code> (ticket
+ <a href="https://svn.boost.org/trac/boost/ticket/3365">#3365</a>).
+ <code>multi_index_container</code> serialization
+ <a href="../../serialization/doc/tutorial.html#versioning">class version</a> has been
+ bumped from 0 to 1.
+ </li>
+ <li>Fixed a concurrency bug in the implementation of
+ <a href="tutorial/debug.html#safe_mode">safe mode</a>
+ (ticket <a href="https://svn.boost.org/trac/boost/ticket/3462">#3462</a>).
+ </li>
+</ul>
+</p>
+
+<h2><a name="boost_1_38">Boost 1.38 release</a></h2>
+
+<p>
+<ul>
+ <li>These constructs are deprecated:
+ <ul>
+ <li><code>nth_index_iterator<MultiIndexContainer,N>::type</code>,</li>
+ <li><code>multi_index_container<...>::nth_index_iterator<N>::type</code>,</li>
+ <li><code>nth_index_const_iterator<MultiIndexContainer,N>::type</code>,</li>
+ <li><code>multi_index_container<...>::nth_index_const_iterator<N>::type</code>,</li>
+ <li><code>index_iterator<MultiIndexContainer,Tag>::type</code>,</li>
+ <li><code>multi_index_container<...>::index_iterator<Tag>::type</code>,</li>
+ <li><code>index_const_iterator<MultiIndexContainer,Tag>::type</code>,</li>
+ <li><code>multi_index_container<...>::index_const_iterator<Tag>::type</code>.</li>
+ </ul>
+ Use the following instead:
+ <ul>
+ <li><code>nth_index<MultiIndexContainer,N>::type::iterator</code>,</li>
+ <li><code>multi_index_container<...>::nth_index<N>::type::iterator</code>,</li>
+ <li><code>nth_index<MultiIndexContainer,N>::type::const_iterator</code>,</li>
+ <li><code>multi_index_container<...>::nth_index<N>::type::const_iterator</code>,</li>
+ <li><code>index<MultiIndexContainer,Tag>::type::iterator</code>,</li>
+ <li><code>multi_index_container<...>::index<Tag>::type::iterator</code>,</li>
+ <li><code>index<MultiIndexContainer,Tag>::type::const_iterator</code>,</li>
+ <li><code>multi_index_container<...>::index<Tag>::type::const_iterator</code>.</li>
+ </ul>
+ </li>
+ <li>Maintenance fixes.</li>
+</ul>
+</p>
+
+<h2><a name="boost_1_37">Boost 1.37 release</a></h2>
+
+<p>
+<ul>
+ <li>Maintenance fixes.</li>
+</ul>
+</p>
+
+<h2><a name="boost_1_36">Boost 1.36 release</a></h2>
+
+<p>
+<ul>
+ <li><a name="stable_update">On prior versions of the library, the <a href="tutorial/indices.html#hash_updating">update
+ member functions</a> of hashed indices could alter the position of an element even if the
+ associated key did not change with the update. This is legal but probably unexpected behavior.
+ The functions have been rewritten to provide the additional guarantee that elements with
+ unmodified key will not change position in hashed indices, just as always was the case with
+ ordered indices. These guarantees are now documented in the reference.</a></li>
+ <li>Added the constructor <code>multi_index_container::multi_index_container(const allocator_type&)</code>
+ to mimic the equivalent interface in STL sequence containers.
+ <li>Maintenance fixes.</li>
+</ul>
+</p>
+
+<h2><a name="boost_1_35">Boost 1.35 release</a></h2>
+
+<p>
+<ul>
+ <li>New <a href="tutorial/key_extraction.html#global_fun"><code>global_fun</code></a>
+ predefined key extractor.
+ </li>
+ <li>Added <a href="tutorial/indices.html#iterator_to"><code>iterator_to</code></a>
+ facility.
+ </li>
+ <li>Included <a href="tutorial/creation.html#special_allocator">support for
+ non-standard allocators</a> such as those of
+ <a href="../../interprocess/index.html">Boost.Interprocess</a>, which makes
+ <code>multi_index_container</code>s placeable in shared memory.
+ </li>
+ <li>New versions of <code>modify</code> and <code>modify_key</code> with
+ rollback, as described in the
+ <a href="tutorial/basics.html#ord_updating">tutorial</a>.
+ </li>
+ <li>Indices provide the new <code>cbegin</code>, <code>cend</code> and,
+ when applicable, <code>crbegin</code> and <code>crend</code>
+ member functions, in accordance with the latest drafts of the next
+ revision of the C++ standard.
+ </li>
+ <li>Hinted insertion in ordered indices fully conforms to the resolutions of
+ C++ Standard Library
+ <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#233">Defect
+ Report 233</a>. The new requirement that the point of insertion
+ be always as close as possible to the hint induces a different behavior than
+ exhibited in former releases of Boost.MultiIndex, which can potentially cause
+ backwards compatibility problems; in any case, the likelihood of these
+ compatibility issues arising in a real scenario is very low.
+ </li>
+ <li>Sequenced and random access indices now follow the requirements of the
+ C++ standard for sequence containers with respect to the operations
+ <code>assign(f,l)</code> and <code>insert(p,f,l)</code> (23.1.1/9): if
+ <code>f</code> and <code>l</code> are of the same integral type, the
+ iterator-based overloads of these member functions are avoided:
+<blockquote><pre>
+<span class=keyword>typedef</span> <span class=identifier>multi_index_container</span><span class=special><</span>
+ <span class=keyword>int</span><span class=special>,</span><span class=identifier>indexed_by</span><span class=special><</span><span class=identifier>sequenced</span><span class=special><></span> <span class=special>></span>
+<span class=special>></span> <span class=identifier>sequenced_container</span><span class=special>;</span>
+
+<span class=identifier>std</span><span class=special>::</span><span class=identifier>list</span><span class=special><</span><span class=keyword>int</span><span class=special>></span> <span class=identifier>l</span><span class=special>(...);</span>
+<span class=identifier>sequenced_container</span> <span class=identifier>c</span><span class=special>;</span>
+
+<span class=comment>// iterator-based overload of assign</span>
+<span class=identifier>c</span><span class=special>.</span><span class=identifier>assign</span><span class=special>(</span><span class=identifier>l</span><span class=special>.</span><span class=identifier>begin</span><span class=special>(),</span><span class=identifier>l</span><span class=special>.</span><span class=identifier>end</span><span class=special>());</span>
+
+<span class=comment>// The following is equivalent to
+// c.assign(
+// static_cast<sequenced_container::size_type>(10),100);
+// that is, "10" and "100" are not taken to be iterators as
+// in the previous expression.</span>
+<span class=identifier>c</span><span class=special>.</span><span class=identifier>assign</span><span class=special>(</span><span class=number>10</span><span class=special>,</span><span class=number>100</span><span class=special>);</span>
+</pre></blockquote>
+ </li>
+ <li>The performance of ordered indices <code>range</code> and
+ <code>equal_range</code> has been improved.
+ </li>
+ <li>Maintenance fixes.</li>
+</ul>
+</p>
+
+<h2><a name="boost_1_34">Boost 1.34 release</a></h2>
+
+<p>
+<ul>
+ <li>Added <a href="tutorial/indices.html#rnd_indices">random access
+ indices</a>.
+ </li>
+ <li>Non key-based indices provide new
+ <a href="tutorial/indices.html#rearrange">rearrange facilities</a>
+ allowing for interaction with external mutating algorithms.
+ </li>
+ <li>All predefined Boost.MultiIndex key extractors
+ instantiated for a given type <code>T</code> can handle objects of types
+ derived from or convertible to <code>T</code> (and
+ <a href="reference/key_extraction.html#chained_pointers">chained pointers</a>
+ to those). Previously, only objects of the exact type specified (along with
+ <code>reference_wrapper</code>s and chained pointers to them) were accepted.
+ </li>
+ <li><a href="reference/key_extraction.html#composite_key_compare"><code>composite_key_compare</code></a>
+ and related classes accept operands not included in tuples as if they were passed
+ in a tuple of length 1; this allows the user to omit tuple enclosing in
+ lookup operations involving composite keys when only the first key is provided.
+ </li>
+ <li>The core algorithms of ordered indices have been optimized, yielding
+ an estimated reduction of about 5% in insertion times.
+ </li>
+ <li>Size of ordered indices node headers have been reduced by 25% on
+ most platforms, using a well known
+ <a href="tutorial/indices.html#ordered_node_compression">optimization
+ technique</a>.
+ </li>
+ <li>The tutorial has been restructured, new examples added.</li>
+ <li>Maintenance fixes.</li>
+</ul>
+</p>
+
+<h2><a name="boost_1_33_1">Boost 1.33.1 release</a></h2>
+
+<p>
+<ul>
+ <li>For ordered and hashed indices, <code>erase(it)</code> and
+ <code>erase(first,last)</code> now return an iterator to the element
+ following those being deleted (previously nothing was returned), in
+ accordance with the C++ Standard Library
+ <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#130">Defect
+ Report 130</a> and issue 6.19 of TR1
+ <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1837.pdf">Issues
+ List</a>.
+ </li>
+ <li>Boost.MultiIndex offers the usual guarantees with respect to
+ multithreading code provided by most STL implementations:
+ <ol>
+ <li>Concurrent access to different containers is safe.</li>
+ <li>Concurrent read-only access to the same container is safe.</li>
+ </ol>
+ In previous versions of the library, the latter guarantee was not properly
+ maintained if the <a href="tutorial/debug.html#safe_mode">safe
+ mode</a> was set. This problem has been fixed now.
+ </li>
+ <li>Maintenance fixes.</li>
+</ul>
+</p>
+
+<h2><a name="boost_1_33">Boost 1.33 release</a></h2>
+
+<p>
+<ul>
+ <li>Added <a href="tutorial/indices.html#hashed_indices">hashed indices</a>,
+ whose interface is based on the specification for unordered associative
+ containers by the C++ Standard Library Technical Report (TR1).
+ </li>
+ <li>Added <a href="tutorial/creation.html#serialization">serialization support</a>
+ for <a href="../../serialization/index.html">Boost.Serialization</a>.
+ </li>
+ <li>Destruction of <code>multi_index_container</code>s and <code>clear</code>
+ memfuns now perform faster.
+ </li>
+ <li>Internal changes aimed at reducing the length of symbol names generated
+ by the compiler; cuts of up to a 50% can be achieved with respect to the
+ Boost 1.32 release. This results in much shorter and more readable error
+ messages and has also a beneficial impact on compilers with strict limits on
+ symbol name lengths. Additionally, a section on further
+ <a href="compiler_specifics.html#symbol_reduction">reduction of symbol name
+ lengths</a> has been added.
+ </li>
+ <li>Restructured some parts of the documentation, new examples.</li>
+ <li>Maintenance fixes.</li>
+</ul>
+</p>
+
+<hr>
+
+<div class="prev_link"><a href="future_work.html"><img src="prev.gif" alt="future work" border="0"><br>
+Future work
+</a></div>
+<div class="up_link"><a href="index.html"><img src="up.gif" alt="index" border="0"><br>
+Index
+</a></div>
+<div class="next_link"><a href="acknowledgements.html"><img src="next.gif" alt="acknowledgements" border="0"><br>
+Acknowledgements
+</a></div><br clear="all" style="clear: all;">
+
+<br>
+
+<p>Revised April 13th 2018</p>
+
+<p>© Copyright 2003-2018 Joaquín M López Muñoz.
+Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt">
+LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt</a>)
+</p>
+
+</body>
+</html>