1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0.1 Transitional//EN">
5 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
6 <title>Boost.MultiIndex Documentation - Release notes</title>
7 <link rel="stylesheet" href="style.css" type="text/css">
8 <link rel="start" href="index.html">
9 <link rel="prev" href="future_work.html">
10 <link rel="up" href="index.html">
11 <link rel="next" href="acknowledgements.html">
15 <h1><img src="../../../boost.png" alt="boost.png (6897 bytes)" align=
16 "middle" width="277" height="86">Boost.MultiIndex Release notes</h1>
18 <div class="prev_link"><a href="future_work.html"><img src="prev.gif" alt="future work" border="0"><br>
21 <div class="up_link"><a href="index.html"><img src="up.gif" alt="index" border="0"><br>
24 <div class="next_link"><a href="acknowledgements.html"><img src="next.gif" alt="acknowledgements" border="0"><br>
26 </a></div><br clear="all" style="clear: all;">
33 <li><a href="#boost_1_64">Boost 1.64 release</a></li>
34 <li><a href="#boost_1_62">Boost 1.62 release</a></li>
35 <li><a href="#boost_1_60">Boost 1.60 release</a></li>
36 <li><a href="#boost_1_59">Boost 1.59 release</a></li>
37 <li><a href="#boost_1_58">Boost 1.58 release</a></li>
38 <li><a href="#boost_1_57">Boost 1.57 release</a></li>
39 <li><a href="#boost_1_56">Boost 1.56 release</a></li>
40 <li><a href="#boost_1_55">Boost 1.55 release</a></li>
41 <li><a href="#boost_1_54">Boost 1.54 release</a></li>
42 <li><a href="#boost_1_49">Boost 1.49 release</a></li>
43 <li><a href="#boost_1_48">Boost 1.48 release</a></li>
44 <li><a href="#boost_1_47">Boost 1.47 release</a></li>
45 <li><a href="#boost_1_44">Boost 1.44 release</a></li>
46 <li><a href="#boost_1_43">Boost 1.43 release</a></li>
47 <li><a href="#boost_1_42">Boost 1.42 release</a></li>
48 <li><a href="#boost_1_41">Boost 1.41 release</a></li>
49 <li><a href="#boost_1_38">Boost 1.38 release</a></li>
50 <li><a href="#boost_1_37">Boost 1.37 release</a></li>
51 <li><a href="#boost_1_36">Boost 1.36 release</a></li>
52 <li><a href="#boost_1_35">Boost 1.35 release</a></li>
53 <li><a href="#boost_1_34">Boost 1.34 release</a></li>
54 <li><a href="#boost_1_33_1">Boost 1.33.1 release</a></li>
55 <li><a href="#boost_1_33">Boost 1.33 release</a></li>
58 <h2><a name="boost_1_64">Boost 1.64 release</a></h2>
62 <li>Fixed a bug related to ambiguous references in the presence of more than
64 (ticket <a href="https://svn.boost.org/trac/boost/ticket/12955">#12955</a>).
66 <li>Maintenance fixes.</li>
70 <h2><a name="boost_1_62">Boost 1.62 release</a></h2>
74 <li>Maintenance fixes.</li>
78 <h2><a name="boost_1_60">Boost 1.60 release</a></h2>
82 <li>Fixed an interoperability problem with <a href="http://www.qt.io/">Qt</a> due to the
83 optional definition of a macro with name <code>foreach</code> in this framework.</li>
84 <li>Maintenance fixes.</li>
88 <h2><a name="boost_1_59">Boost 1.59 release</a></h2>
92 <li>Added <a href="tutorial/indices.html#rnk_indices">ranked indices</a>.</li>
93 <li>Maintenance fixes.</li>
97 <h2><a name="boost_1_58">Boost 1.58 release</a></h2>
101 <li>The efficiency of lookup operations has improved in situations where they involve
102 the generation of temporary values of <code>key_type</code>. Consider for instance
105 <span class=keyword>typedef</span> <span class=identifier>multi_index_container</span><span class=special><</span>
106 <span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span><span class=special>,</span>
107 <span class=identifier>indexed_by</span><span class=special><</span>
108 <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>
109 <span class=special>></span>
110 <span class=special>></span> <span class=identifier>multi_t</span><span class=special>;</span>
111 <span class=special>...</span>
112 <span class=identifier>multi_t</span> <span class=identifier>m</span><span class=special>=...;</span>
113 <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>
115 In previous versions of the library, the <code>find</code> operation generates
116 several temporary <code>std::string</code>s (one every time an internal comparison is made).
117 In sufficiently advanced compilers, this is now avoided so that only one temporary is
120 <li>Maintenance fixes.</li>
124 <h2><a name="boost_1_57">Boost 1.57 release</a></h2>
128 <li>When <code>std::tuple</code>s are available, these can be used for lookup operations
129 in indices equipped with composite keys. <code>boost::tuple</code>s are also supported
130 for backwards compatibility.
135 <h2><a name="boost_1_56">Boost 1.56 release</a></h2>
139 <li>The <code>erase(iterator)</code> member function of hashed indices
140 used to have poor performance under low load conditions due to the requirement
141 that an iterator to the next element must be returned (see ticket
142 <a href="https://svn.boost.org/trac/boost/ticket/4264">#4264</a>). In accordance with
143 the resolution of <a href="http://lwg.github.io/issues/lwg-closed.html#579">LWG
144 issue #579</a>, this problem has been fixed while maintaining the interface of
145 <code>erase</code>, at the expense of using one more
146 word of memory per element. In fact, C++ complexity requirements on unordered
147 associative containers have been improved for hashed indices so that
149 <li>deletion of a given element is unconditionally constant-time,</li>
150 <li>worst-case performance is not <code>O(n)</code> but <code>O(n<sub>dist</sub>)</code>,
151 where <code>n<sub>dist</sub></code> is the number of non-equivalent elements in the index.
154 Due to the fact that hashed indices rely on a new data structure, the internal representation of
155 their iterators and local iterators have changed, which affects serialization: their corresponding
156 serialization <a href="../../serialization/doc/tutorial.html#versioning">class version</a> has been
157 bumped from 0 to 1. Old archives involving hashed index (local) iterators can be loaded
158 by Boost 1.56 version of Boost.MultiIndex, but not the other way around.
160 <li>Hashed indices now provide <code>reserve</code>.</li>
161 <li>Hashed indices can now be checked for equality and inequality following the
162 (suitably adapted) C++ standard specification in <b>[unord.req]</b>.</li>
163 <li>The public interface of Boost.MultiIndex provide <code>noexcept</code> specifications
164 where appropriate (for compliant compilers).
166 <li>Improved performance of failed insertions into a <code>multi_index_container</code>.</li>
167 <li>Much internal code aimed at supporting MSVC++ 7.0 and prior has been removed.
168 Compilation times without this legacy code might be slightly faster.
170 <li>Fixed a bug with insertion via iterators dereferencing to rvalues
171 (ticket <a href="https://svn.boost.org/trac/boost/ticket/9665">#9665</a>).
173 <li>Made Boost.MultiIndex compatible with <code>BOOST_BIND_NO_PLACEHOLDERS</code>
174 (ticket <a href="https://svn.boost.org/trac/boost/ticket/9798">#9798</a>).
176 <li>Maintenance fixes.</li>
180 <h2><a name="boost_1_55">Boost 1.55 release</a></h2>
184 <li>Boost.MultiIndex has been brought to a higher level of compliance
187 <li><code>multi_index_container</code> is now efficiently movable.</li>
188 <li>Initializer lists supported.</li>
189 <li>Emplace functions provided.</li>
190 <li>Non-copyable elements (such as <code>std::unique_ptr<T></code>) supported. This includes
191 insertion of a range [<code>first</code>,<code>last</code>) where the iterators point to a type that is
192 convertible to that of the element: no copy construction happens in the process.
194 <li>Random access indices provide <code>shrink_to_fit()</code>.</li>
196 Refer to the <a href="compiler_specifics.html">compiler specifics</a> section for limitations
197 on pre-C++11 compilers.
199 <li>The following classes are deprecated:
201 <li><a href="reference/key_extraction.html#member_offset"><code>member_offset</code></a>,</li>
202 <li><a href="reference/key_extraction.html#const_mem_fun_explicit"><code>const_mem_fun_explicit</code></a>,</li>
203 <li><a href="reference/key_extraction.html#const_mem_fun_explicit"><code>mem_fun_explicit</code></a>,</li>
204 <li><a href="reference/key_extraction.html#composite_key_result_equal_to"><code>composite_key_result_equal_to</code></a>,</li>
205 <li><a href="reference/key_extraction.html#composite_key_result_less"><code>composite_key_result_less</code></a>,</li>
206 <li><a href="reference/key_extraction.html#composite_key_result_greater"><code>composite_key_result_greater</code></a>,</li>
207 <li><a href="reference/key_extraction.html#composite_key_result_hash"><code>composite_key_result_hash</code></a>.</li>
210 <li>Maintenance fixes.</li>
214 <h2><a name="boost_1_54">Boost 1.54 release</a></h2>
218 <li>Suppressed some potential warnings described in
219 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>.
221 <li>Maintenance fixes.</li>
225 <h2><a name="boost_1_49">Boost 1.49 release</a></h2>
229 <li>Suppressed a potential narrow conversion warning described in
230 ticket <a href="https://svn.boost.org/trac/boost/ticket/3365">#3365</a>.
235 <h2><a name="boost_1_48">Boost 1.48 release</a></h2>
239 <li>Fixed a compatibility problem with
240 <a href="../../../doc/html/foreach.html">Boost.Foreach</a>
241 (ticket <a href="https://svn.boost.org/trac/boost/ticket/5741">#5741</a>).
246 <h2><a name="boost_1_47">Boost 1.47 release</a></h2>
250 <li>Fixed an ADL problem in
251 <a href="reference/key_extraction.html#composite_key_compare"><code>composite_key_compare</code></a>
252 related with <a href="../../../doc/html/ref.html">Boost.Ref</a>.
254 <li>Maintenance fixes.</li>
258 <h2><a name="boost_1_44">Boost 1.44 release</a></h2>
263 Fixed a bug preventing the use of <code>modify_key</code> with
264 rollback in <a href="reference/ord_indices.html#modify_key">ordered</a> and
265 <a href="reference/hash_indices.html#modify_key">hashed</a> indices when
266 <code>Modifier</code> and <code>Rollback</code> are different types
267 (ticket <a href="https://svn.boost.org/trac/boost/ticket/4130">#4130</a>).
272 <h2><a name="boost_1_43">Boost 1.43 release</a></h2>
277 <a href="../../serialization/doc/serialization.html#constructors">Serialization
278 of non default constructible values</a> is now properly supported
279 through user-provided facilities <code>save_construct_data</code> and
280 <code>load_construct_data</code>.
281 <code>multi_index_container</code> serialization
282 <a href="../../serialization/doc/tutorial.html#versioning">class version</a> has been
288 <h2><a name="boost_1_42">Boost 1.42 release</a></h2>
292 <li>Maintenance fixes.</li>
296 <h2><a name="boost_1_41">Boost 1.41 release</a></h2>
299 <li>Serialization now uses the portable
300 <a href="../../serialization/doc/wrappers.html#collection_size_type"><code>collection_size_type</code></a>
301 type instead of the original <code>std::size_t</code> (ticket
302 <a href="https://svn.boost.org/trac/boost/ticket/3365">#3365</a>).
303 <code>multi_index_container</code> serialization
304 <a href="../../serialization/doc/tutorial.html#versioning">class version</a> has been
307 <li>Fixed a concurrency bug in the implementation of
308 <a href="tutorial/debug.html#safe_mode">safe mode</a>
309 (ticket <a href="https://svn.boost.org/trac/boost/ticket/3462">#3462</a>).
314 <h2><a name="boost_1_38">Boost 1.38 release</a></h2>
318 <li>These constructs are deprecated:
320 <li><code>nth_index_iterator<MultiIndexContainer,N>::type</code>,</li>
321 <li><code>multi_index_container<...>::nth_index_iterator<N>::type</code>,</li>
322 <li><code>nth_index_const_iterator<MultiIndexContainer,N>::type</code>,</li>
323 <li><code>multi_index_container<...>::nth_index_const_iterator<N>::type</code>,</li>
324 <li><code>index_iterator<MultiIndexContainer,Tag>::type</code>,</li>
325 <li><code>multi_index_container<...>::index_iterator<Tag>::type</code>,</li>
326 <li><code>index_const_iterator<MultiIndexContainer,Tag>::type</code>,</li>
327 <li><code>multi_index_container<...>::index_const_iterator<Tag>::type</code>.</li>
329 Use the following instead:
331 <li><code>nth_index<MultiIndexContainer,N>::type::iterator</code>,</li>
332 <li><code>multi_index_container<...>::nth_index<N>::type::iterator</code>,</li>
333 <li><code>nth_index<MultiIndexContainer,N>::type::const_iterator</code>,</li>
334 <li><code>multi_index_container<...>::nth_index<N>::type::const_iterator</code>,</li>
335 <li><code>index<MultiIndexContainer,Tag>::type::iterator</code>,</li>
336 <li><code>multi_index_container<...>::index<Tag>::type::iterator</code>,</li>
337 <li><code>index<MultiIndexContainer,Tag>::type::const_iterator</code>,</li>
338 <li><code>multi_index_container<...>::index<Tag>::type::const_iterator</code>.</li>
341 <li>Maintenance fixes.</li>
345 <h2><a name="boost_1_37">Boost 1.37 release</a></h2>
349 <li>Maintenance fixes.</li>
353 <h2><a name="boost_1_36">Boost 1.36 release</a></h2>
357 <li><a name="stable_update">On prior versions of the library, the <a href="tutorial/indices.html#hash_updating">update
358 member functions</a> of hashed indices could alter the position of an element even if the
359 associated key did not change with the update. This is legal but probably unexpected behavior.
360 The functions have been rewritten to provide the additional guarantee that elements with
361 unmodified key will not change position in hashed indices, just as always was the case with
362 ordered indices. These guarantees are now documented in the reference.</a></li>
363 <li>Added the constructor <code>multi_index_container::multi_index_container(const allocator_type&)</code>
364 to mimic the equivalent interface in STL sequence containers.
365 <li>Maintenance fixes.</li>
369 <h2><a name="boost_1_35">Boost 1.35 release</a></h2>
373 <li>New <a href="tutorial/key_extraction.html#global_fun"><code>global_fun</code></a>
374 predefined key extractor.
376 <li>Added <a href="tutorial/indices.html#iterator_to"><code>iterator_to</code></a>
379 <li>Included <a href="tutorial/creation.html#special_allocator">support for
380 non-standard allocators</a> such as those of
381 <a href="../../interprocess/index.html">Boost.Interprocess</a>, which makes
382 <code>multi_index_container</code>s placeable in shared memory.
384 <li>New versions of <code>modify</code> and <code>modify_key</code> with
385 rollback, as described in the
386 <a href="tutorial/basics.html#ord_updating">tutorial</a>.
388 <li>Indices provide the new <code>cbegin</code>, <code>cend</code> and,
389 when applicable, <code>crbegin</code> and <code>crend</code>
390 member functions, in accordance with the latest drafts of the next
391 revision of the C++ standard.
393 <li>Hinted insertion in ordered indices fully conforms to the resolutions of
395 <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#233">Defect
396 Report 233</a>. The new requirement that the point of insertion
397 be always as close as possible to the hint induces a different behavior than
398 exhibited in former releases of Boost.MultiIndex, which can potentially cause
399 backwards compatibility problems; in any case, the likelihood of these
400 compatibility issues arising in a real scenario is very low.
402 <li>Sequenced and random access indices now follow the requirements of the
403 C++ standard for sequence containers with respect to the operations
404 <code>assign(f,l)</code> and <code>insert(p,f,l)</code> (23.1.1/9): if
405 <code>f</code> and <code>l</code> are of the same integral type, the
406 iterator-based overloads of these member functions are avoided:
408 <span class=keyword>typedef</span> <span class=identifier>multi_index_container</span><span class=special><</span>
409 <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>
410 <span class=special>></span> <span class=identifier>sequenced_container</span><span class=special>;</span>
412 <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>
413 <span class=identifier>sequenced_container</span> <span class=identifier>c</span><span class=special>;</span>
415 <span class=comment>// iterator-based overload of assign</span>
416 <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>
418 <span class=comment>// The following is equivalent to
420 // static_cast<sequenced_container::size_type>(10),100);
421 // that is, "10" and "100" are not taken to be iterators as
422 // in the previous expression.</span>
423 <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>
426 <li>The performance of ordered indices <code>range</code> and
427 <code>equal_range</code> has been improved.
429 <li>Maintenance fixes.</li>
433 <h2><a name="boost_1_34">Boost 1.34 release</a></h2>
437 <li>Added <a href="tutorial/indices.html#rnd_indices">random access
440 <li>Non key-based indices provide new
441 <a href="tutorial/indices.html#rearrange">rearrange facilities</a>
442 allowing for interaction with external mutating algorithms.
444 <li>All predefined Boost.MultiIndex key extractors
445 instantiated for a given type <code>T</code> can handle objects of types
446 derived from or convertible to <code>T</code> (and
447 <a href="reference/key_extraction.html#chained_pointers">chained pointers</a>
448 to those). Previously, only objects of the exact type specified (along with
449 <code>reference_wrapper</code>s and chained pointers to them) were accepted.
451 <li><a href="reference/key_extraction.html#composite_key_compare"><code>composite_key_compare</code></a>
452 and related classes accept operands not included in tuples as if they were passed
453 in a tuple of length 1; this allows the user to omit tuple enclosing in
454 lookup operations involving composite keys when only the first key is provided.
456 <li>The core algorithms of ordered indices have been optimized, yielding
457 an estimated reduction of about 5% in insertion times.
459 <li>Size of ordered indices node headers have been reduced by 25% on
460 most platforms, using a well known
461 <a href="tutorial/indices.html#ordered_node_compression">optimization
464 <li>The tutorial has been restructured, new examples added.</li>
465 <li>Maintenance fixes.</li>
469 <h2><a name="boost_1_33_1">Boost 1.33.1 release</a></h2>
473 <li>For ordered and hashed indices, <code>erase(it)</code> and
474 <code>erase(first,last)</code> now return an iterator to the element
475 following those being deleted (previously nothing was returned), in
476 accordance with the C++ Standard Library
477 <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#130">Defect
478 Report 130</a> and issue 6.19 of TR1
479 <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1837.pdf">Issues
482 <li>Boost.MultiIndex offers the usual guarantees with respect to
483 multithreading code provided by most STL implementations:
485 <li>Concurrent access to different containers is safe.</li>
486 <li>Concurrent read-only access to the same container is safe.</li>
488 In previous versions of the library, the latter guarantee was not properly
489 maintained if the <a href="tutorial/debug.html#safe_mode">safe
490 mode</a> was set. This problem has been fixed now.
492 <li>Maintenance fixes.</li>
496 <h2><a name="boost_1_33">Boost 1.33 release</a></h2>
500 <li>Added <a href="tutorial/indices.html#hashed_indices">hashed indices</a>,
501 whose interface is based on the specification for unordered associative
502 containers by the C++ Standard Library Technical Report (TR1).
504 <li>Added <a href="tutorial/creation.html#serialization">serialization support</a>
505 for <a href="../../serialization/index.html">Boost.Serialization</a>.
507 <li>Destruction of <code>multi_index_container</code>s and <code>clear</code>
508 memfuns now perform faster.
510 <li>Internal changes aimed at reducing the length of symbol names generated
511 by the compiler; cuts of up to a 50% can be achieved with respect to the
512 Boost 1.32 release. This results in much shorter and more readable error
513 messages and has also a beneficial impact on compilers with strict limits on
514 symbol name lengths. Additionally, a section on further
515 <a href="compiler_specifics.html#symbol_reduction">reduction of symbol name
516 lengths</a> has been added.
518 <li>Restructured some parts of the documentation, new examples.</li>
519 <li>Maintenance fixes.</li>
525 <div class="prev_link"><a href="future_work.html"><img src="prev.gif" alt="future work" border="0"><br>
528 <div class="up_link"><a href="index.html"><img src="up.gif" alt="index" border="0"><br>
531 <div class="next_link"><a href="acknowledgements.html"><img src="next.gif" alt="acknowledgements" border="0"><br>
533 </a></div><br clear="all" style="clear: all;">
537 <p>Revised April 10th 2017</p>
539 <p>© Copyright 2003-2017 Joaquín M López Muñoz.
540 Distributed under the Boost Software
541 License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt">
542 LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
543 http://www.boost.org/LICENSE_1_0.txt</a>)