• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0.1 Transitional//EN">
2
3<html>
4<head>
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">
12</head>
13
14<body>
15<h1><img src="../../../boost.png" alt="boost.png (6897 bytes)" align=
16"middle" width="277" height="86">Boost.MultiIndex Release notes</h1>
17
18<div class="prev_link"><a href="future_work.html"><img src="prev.gif" alt="future work" border="0"><br>
19Future work
20</a></div>
21<div class="up_link"><a href="index.html"><img src="up.gif" alt="index" border="0"><br>
22Index
23</a></div>
24<div class="next_link"><a href="acknowledgements.html"><img src="next.gif" alt="acknowledgements" border="0"><br>
25Acknowledgements
26</a></div><br clear="all" style="clear: all;">
27
28<hr>
29
30<h2>Contents</h2>
31
32<ul>
33  <li><a href="#boost_1_74">Boost 1.74 release</a></li>
34  <li><a href="#boost_1_73">Boost 1.73 release</a></li>
35  <li><a href="#boost_1_71">Boost 1.71 release</a></li>
36  <li><a href="#boost_1_70">Boost 1.70 release</a></li>
37  <li><a href="#boost_1_69">Boost 1.69 release</a></li>
38  <li><a href="#boost_1_68">Boost 1.68 release</a></li>
39  <li><a href="#boost_1_67">Boost 1.67 release</a></li>
40  <li><a href="#boost_1_66">Boost 1.66 release</a></li>
41  <li><a href="#boost_1_64">Boost 1.64 release</a></li>
42  <li><a href="#boost_1_62">Boost 1.62 release</a></li>
43  <li><a href="#boost_1_60">Boost 1.60 release</a></li>
44  <li><a href="#boost_1_59">Boost 1.59 release</a></li>
45  <li><a href="#boost_1_58">Boost 1.58 release</a></li>
46  <li><a href="#boost_1_57">Boost 1.57 release</a></li>
47  <li><a href="#boost_1_56">Boost 1.56 release</a></li>
48  <li><a href="#boost_1_55">Boost 1.55 release</a></li>
49  <li><a href="#boost_1_54">Boost 1.54 release</a></li>
50  <li><a href="#boost_1_49">Boost 1.49 release</a></li>
51  <li><a href="#boost_1_48">Boost 1.48 release</a></li>
52  <li><a href="#boost_1_47">Boost 1.47 release</a></li>
53  <li><a href="#boost_1_44">Boost 1.44 release</a></li>
54  <li><a href="#boost_1_43">Boost 1.43 release</a></li>
55  <li><a href="#boost_1_42">Boost 1.42 release</a></li>
56  <li><a href="#boost_1_41">Boost 1.41 release</a></li>
57  <li><a href="#boost_1_38">Boost 1.38 release</a></li>
58  <li><a href="#boost_1_37">Boost 1.37 release</a></li>
59  <li><a href="#boost_1_36">Boost 1.36 release</a></li>
60  <li><a href="#boost_1_35">Boost 1.35 release</a></li>
61  <li><a href="#boost_1_34">Boost 1.34 release</a></li>
62  <li><a href="#boost_1_33_1">Boost 1.33.1 release</a></li>
63  <li><a href="#boost_1_33">Boost 1.33 release</a></li>
64</ul>
65
66<h2><a name="boost_1_74">Boost 1.74 release</a></h2>
67
68<p>
69<ul>
70  <li>
71    Added <a href="tutorial/basics.html#node_handling">node extraction and insertion</a>
72    following the analogous interface of associative containers as introduced in C++17.
73    This feature has also been extended to non key-based indices, in contrast to C++
74    standard library sequence containers, which do not provide such functionality.
75  </li>
76  <li>Clarified documentation on read/write key extractors
77    (<a href="https://github.com/boostorg/multi_index/issues/32">issue #32</a>).
78  </li>
79  <li>Maintenance work.</li>
80</ul>
81</p>
82
83<h2><a name="boost_1_73">Boost 1.73 release</a></h2>
84
85<p>
86<ul>
87  <li><code>multi_index_container</code> is now
88    <a href="https://en.cppreference.com/w/cpp/named_req/AllocatorAwareContainer"><code>AllocatorAware</code></a>.
89  </li>
90  <li>Swapping of internal <code>KeyFromValue</code>, <code>Compare</code>, <code>Hash</code>
91    and <code>Pred</code> objects now selects the appropriate <code>swap</code>
92    function between <code>std::swap</code> and ADL candidates,
93    in accordance with standard specifications in <b>[swappable.requirements]</b>
94    (<a href="https://github.com/boostorg/multi_index/issues/29">issue #29</a>).
95  </li>
96 <li>Provided some internal copy constructors and assignment operators whose default
97    implicit definition is deprecated in C++11 onwards (<b>[depr.impldec]</b>), which
98    was warned about on some compilers.
99 </li>
100  <li>Maintenance work.</li>
101</ul>
102</p>
103
104<h2><a name="boost_1_71">Boost 1.71 release</a></h2>
105
106<p>
107<ul>
108  <li>Added <a href="tutorial/key_extraction.html#x_mem_fun">variants of
109    <code>const_mem_fun</code> and <code>mem_fun</code></a> for
110    differently qualified member functions
111    (<a href="https://github.com/boostorg/multi_index/issues/24">issue #24</a>).
112  </li>
113  <li>Terse <a href="reference/key_extraction.html#key">key</a> specification syntax
114    now correctly handles <code>noexcept</code>-specified member functions
115    (<a href="https://github.com/boostorg/multi_index/issues/24">issue #24</a>).
116  </li>
117</ul>
118</p>
119
120<h2><a name="boost_1_70">Boost 1.70 release</a></h2>
121
122<p>
123<ul>
124  <li><code>size_type</code> and <code>difference_type</code> are now
125    defined as the allocator's same-named types. This will not make any
126    difference in the vast majority of cases, but allows for some degree
127    of control of resulting internal structures via user-defined allocator
128    types (see
129    <a href="https://github.com/boostorg/multi_index/issues/17">issue #17</a>
130    for motivation). For the moment being, this change is <i>not</i>
131    documented in the reference section (i.e., it has semi-official status).
132  </li>
133  <li>Maintenance work.</li>
134</ul>
135</p>
136
137<h2><a name="boost_1_69">Boost 1.69 release</a></h2>
138
139<p>
140<ul>
141  <li>Introduced an alternative
142    <a href="tutorial/key_extraction.html#key">terse key specification syntax</a>
143    for C++17 compliant environments.
144  </li>
145</ul>
146</p>
147
148<h2><a name="boost_1_68">Boost 1.68 release</a></h2>
149
150<p>
151<ul>
152  <li>Containers of moveable but non-copyable elements can now be serialized
153    (ticket <a href="https://svn.boost.org/trac10/ticket/13478">#13478</a>).
154    Thanks to S&eacute;bastien Paris for the report.
155  </li>
156  <li><code>multi_index_container</code>'s default constructor is no longer
157    <code>explicit</code>
158    (ticket <a href="https://svn.boost.org/trac10/ticket/13518">#13518</a>).
159  </li>
160</ul>
161</p>
162
163<h2><a name="boost_1_67">Boost 1.67 release</a></h2>
164
165<p>
166<ul>
167  <li>Elements with overloaded <code>operator&amp;</code> are now fully accepted
168    (ticket <a href="https://svn.boost.org/trac10/ticket/13307">#13307</a>).
169    Thanks to Daniel Frey for his updating
170    <a href="../../utility/operators.htm#deref">Boost.Operators</a> to help
171    fix this issue.
172  </li>
173  <li>Avoided usage of <code>std::allocator</code> members deprecated in C++17.
174    Contributed by Daniela Engert.
175  </li>
176  <li>Maintenance fixes.</li>
177</ul>
178</p>
179
180<h2><a name="boost_1_66">Boost 1.66 release</a></h2>
181
182<p>
183<ul>
184  <li>Made <code>modify</code> and <code>modify_key</code> more robust so that
185    the modified element is erased if the modifier throws or the rollback
186    functor does not properly restore the element (full discussion at
187    ticket <a href="https://svn.boost.org/trac/boost/ticket/12542">#12542</a>).
188    This is technically backwards incompatible; for instance, the following code:
189<blockquote><pre>
190<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>&amp;){</span><span class=keyword>throw</span> <span class=number>0</span><span class=special>;});</span>
191</pre></blockquote>
192    keeps the container <code>c</code> untouched in former versions of Boost whereas
193    now <code>c.begin()</code> is erased. Thanks to Jon Kalb for raising the issue.
194  </li>
195  <li>Maintenance fixes.</li>
196</ul>
197</p>
198
199<h2><a name="boost_1_64">Boost 1.64 release</a></h2>
200
201<p>
202<ul>
203  <li>Fixed a bug related to ambiguous references in the presence of more than
204    one ranked index
205    (ticket <a href="https://svn.boost.org/trac/boost/ticket/12955">#12955</a>).
206  </li>
207  <li>Maintenance fixes.</li>
208</ul>
209</p>
210
211<h2><a name="boost_1_62">Boost 1.62 release</a></h2>
212
213<p>
214<ul>
215  <li>Maintenance fixes.</li>
216</ul>
217</p>
218
219<h2><a name="boost_1_60">Boost 1.60 release</a></h2>
220
221<p>
222<ul>
223  <li>Fixed an interoperability problem with <a href="http://www.qt.io/">Qt</a> due to the
224    optional definition of a macro with name <code>foreach</code> in this framework.</li>
225  <li>Maintenance fixes.</li>
226</ul>
227</p>
228
229<h2><a name="boost_1_59">Boost 1.59 release</a></h2>
230
231<p>
232<ul>
233  <li>Added <a href="tutorial/indices.html#rnk_indices">ranked indices</a>.</li>
234  <li>Maintenance fixes.</li>
235</ul>
236</p>
237
238<h2><a name="boost_1_58">Boost 1.58 release</a></h2>
239
240<p>
241<ul>
242  <li>The efficiency of lookup operations has improved in situations where they involve
243    the generation of temporary values of <code>key_type</code>. Consider for instance
244    the following code:
245<blockquote><pre>
246<span class=keyword>typedef</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span>
247  <span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span><span class=special>,</span>
248  <span class=identifier>indexed_by</span><span class=special>&lt;</span>
249    <span class=identifier>ordered_unique</span><span class=special>&lt;</span><span class=identifier>identity</span><span class=special>&lt;</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span><span class=special>&gt;</span> <span class=special>&gt;</span>
250  <span class=special>&gt;</span>
251<span class=special>&gt;</span> <span class=identifier>multi_t</span><span class=special>;</span>
252<span class=special>...</span>
253<span class=identifier>multi_t</span> <span class=identifier>m</span><span class=special>=...;</span>
254<span class=identifier>m</span><span class=special>.</span><span class=identifier>find</span><span class=special>(</span><span class=string>&quot;boost&quot;</span><span class=special>);</span> <span class=comment>// passed a const char*, not a std::string</span>
255</pre></blockquote>
256      In previous versions of the library, the <code>find</code> operation generates
257      several temporary <code>std::string</code>s (one every time an internal comparison is made).
258      In sufficiently advanced compilers, this is now avoided so that only one temporary is
259      created.
260  </li>
261  <li>Maintenance fixes.</li>
262</ul>
263</p>
264
265<h2><a name="boost_1_57">Boost 1.57 release</a></h2>
266
267<p>
268<ul>
269  <li>When <code>std::tuple</code>s are available, these can be used for lookup operations
270     in indices equipped with composite keys. <code>boost::tuple</code>s are also supported
271     for backwards compatibility.
272  </li>
273</ul>
274</p>
275
276<h2><a name="boost_1_56">Boost 1.56 release</a></h2>
277
278<p>
279<ul>
280  <li>The <code>erase(iterator)</code> member function of hashed indices
281    used to have poor performance under low load conditions due to the requirement
282    that an iterator to the next element must be returned (see ticket
283    <a href="https://svn.boost.org/trac/boost/ticket/4264">#4264</a>). In accordance with
284    the resolution of <a href="http://lwg.github.io/issues/lwg-closed.html#579">LWG
285    issue #579</a>, this problem has been fixed while maintaining the interface of
286    <code>erase</code>, at the expense of using one more
287    word of memory per element. In fact, C++ complexity requirements on unordered
288    associative containers have been improved for hashed indices so that
289    <ul>
290      <li>deletion of a given element is unconditionally constant-time,</li>
291      <li>worst-case performance is not <code>O(n)</code> but <code>O(n<sub>dist</sub>)</code>,
292         where <code>n<sub>dist</sub></code> is the number of non-equivalent elements in the index.
293      </li>
294    </ul>
295    Due to the fact that hashed indices rely on a new data structure, the internal representation of
296    their iterators and local iterators have changed, which affects serialization: their corresponding
297    serialization <a href="../../serialization/doc/tutorial.html#versioning">class version</a> has been
298    bumped from 0 to 1. Old archives involving hashed index (local) iterators can be loaded
299    by Boost 1.56 version of Boost.MultiIndex, but not the other way around.
300  </li>
301  <li>Hashed indices now provide <code>reserve</code>.</li>
302  <li>Hashed indices can now be checked for equality and inequality following the
303    (suitably adapted) C++ standard specification in <b>[unord.req]</b>.</li>
304  <li>The public interface of Boost.MultiIndex provide <code>noexcept</code> specifications
305    where appropriate (for compliant compilers).
306  </li>
307  <li>Improved performance of failed insertions into a <code>multi_index_container</code>.</li>
308  <li>Much internal code aimed at supporting MSVC++ 7.0 and prior has been removed.
309    Compilation times without this legacy code might be slightly faster.
310  </li>
311  <li>Fixed a bug with insertion via iterators dereferencing to rvalues
312    (ticket <a href="https://svn.boost.org/trac/boost/ticket/9665">#9665</a>).
313  </li>
314  <li>Made Boost.MultiIndex compatible with <code>BOOST_BIND_NO_PLACEHOLDERS</code>
315    (ticket <a href="https://svn.boost.org/trac/boost/ticket/9798">#9798</a>).
316  </li>
317  <li>Maintenance fixes.</li>
318</ul>
319</p>
320
321<h2><a name="boost_1_55">Boost 1.55 release</a></h2>
322
323<p>
324<ul>
325  <li>Boost.MultiIndex has been brought to a higher level of compliance
326  with C++11.
327  <ul>
328      <li><code>multi_index_container</code> is now efficiently movable.</li>
329      <li>Initializer lists supported.</li>
330      <li>Emplace functions provided.</li>
331      <li>Non-copyable elements (such as <code>std::unique_ptr&lt;T&gt;</code>) supported. This includes
332        insertion of a range [<code>first</code>,<code>last</code>) where the iterators point to a type that is
333        convertible to that of the element: no copy construction happens in the process.
334      </li>
335      <li>Random access indices provide <code>shrink_to_fit()</code>.</li>
336  </ul>
337  Refer to the <a href="compiler_specifics.html">compiler specifics</a> section for limitations
338  on pre-C++11 compilers.
339  </li>
340  <li>The following classes are deprecated:
341  <ul>
342    <li><a href="reference/key_extraction.html#member_offset"><code>member_offset</code></a>,</li>
343    <li><a href="reference/key_extraction.html#const_mem_fun_explicit"><code>const_mem_fun_explicit</code></a>,</li>
344    <li><a href="reference/key_extraction.html#const_mem_fun_explicit"><code>mem_fun_explicit</code></a>,</li>
345    <li><a href="reference/key_extraction.html#composite_key_result_equal_to"><code>composite_key_result_equal_to</code></a>,</li>
346    <li><a href="reference/key_extraction.html#composite_key_result_less"><code>composite_key_result_less</code></a>,</li>
347    <li><a href="reference/key_extraction.html#composite_key_result_greater"><code>composite_key_result_greater</code></a>,</li>
348    <li><a href="reference/key_extraction.html#composite_key_result_hash"><code>composite_key_result_hash</code></a>.</li>
349  </ul>
350  </li>
351  <li>Maintenance fixes.</li>
352</ul>
353</p>
354
355<h2><a name="boost_1_54">Boost 1.54 release</a></h2>
356
357<p>
358<ul>
359  <li>Suppressed some potential warnings described in
360    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>.
361  </li>
362  <li>Maintenance fixes.</li>
363</ul>
364</p>
365
366<h2><a name="boost_1_49">Boost 1.49 release</a></h2>
367
368<p>
369<ul>
370  <li>Suppressed a potential narrow conversion warning described in
371    ticket <a href="https://svn.boost.org/trac/boost/ticket/3365">#3365</a>.
372  </li>
373</ul>
374</p>
375
376<h2><a name="boost_1_48">Boost 1.48 release</a></h2>
377
378<p>
379<ul>
380  <li>Fixed a compatibility problem with
381    <a href="../../../doc/html/foreach.html">Boost.Foreach</a>
382    (ticket <a href="https://svn.boost.org/trac/boost/ticket/5741">#5741</a>).
383  </li>
384</ul>
385</p>
386
387<h2><a name="boost_1_47">Boost 1.47 release</a></h2>
388
389<p>
390<ul>
391  <li>Fixed an ADL problem in
392    <a href="reference/key_extraction.html#composite_key_compare"><code>composite_key_compare</code></a>
393    related with <a href="../../../doc/html/ref.html">Boost.Ref</a>.
394  </li>
395  <li>Maintenance fixes.</li>
396</ul>
397</p>
398
399<h2><a name="boost_1_44">Boost 1.44 release</a></h2>
400
401<p>
402<ul>
403  <li>
404    Fixed a bug preventing the use of <code>modify_key</code> with
405    rollback in <a href="reference/ord_indices.html#modify_key">ordered</a> and
406    <a href="reference/hash_indices.html#modify_key">hashed</a> indices when
407    <code>Modifier</code> and <code>Rollback</code> are different types
408    (ticket <a href="https://svn.boost.org/trac/boost/ticket/4130">#4130</a>).
409  </li>
410</ul>
411</p>
412
413<h2><a name="boost_1_43">Boost 1.43 release</a></h2>
414
415<p>
416<ul>
417  <li>
418    <a href="../../serialization/doc/serialization.html#constructors">Serialization
419    of non default constructible values</a> is now properly supported
420    through user-provided facilities <code>save_construct_data</code> and
421    <code>load_construct_data</code>.
422    <code>multi_index_container</code> serialization
423    <a href="../../serialization/doc/tutorial.html#versioning">class version</a> has been
424    bumped from 1 to 2.
425  </li>
426</ul>
427</p>
428
429<h2><a name="boost_1_42">Boost 1.42 release</a></h2>
430
431<p>
432<ul>
433  <li>Maintenance fixes.</li>
434</ul>
435</p>
436
437<h2><a name="boost_1_41">Boost 1.41 release</a></h2>
438<p>
439<ul>
440  <li>Serialization now uses the portable
441  <a href="../../serialization/doc/wrappers.html#collection_size_type"><code>collection_size_type</code></a>
442  type instead of the original <code>std::size_t</code> (ticket
443  <a href="https://svn.boost.org/trac/boost/ticket/3365">#3365</a>).
444  <code>multi_index_container</code> serialization
445  <a href="../../serialization/doc/tutorial.html#versioning">class version</a> has been
446  bumped from 0 to 1.
447  </li>
448  <li>Fixed a concurrency bug in the implementation of
449    <a href="tutorial/debug.html#safe_mode">safe mode</a>
450    (ticket <a href="https://svn.boost.org/trac/boost/ticket/3462">#3462</a>).
451  </li>
452</ul>
453</p>
454
455<h2><a name="boost_1_38">Boost 1.38 release</a></h2>
456
457<p>
458<ul>
459  <li>These constructs are deprecated:
460    <ul>
461      <li><code>nth_index_iterator&lt;MultiIndexContainer,N&gt;::type</code>,</li>
462      <li><code>multi_index_container&lt;...&gt;::nth_index_iterator&lt;N&gt;::type</code>,</li>
463      <li><code>nth_index_const_iterator&lt;MultiIndexContainer,N&gt;::type</code>,</li>
464      <li><code>multi_index_container&lt;...&gt;::nth_index_const_iterator&lt;N&gt;::type</code>,</li>
465      <li><code>index_iterator&lt;MultiIndexContainer,Tag&gt;::type</code>,</li>
466      <li><code>multi_index_container&lt;...&gt;::index_iterator&lt;Tag&gt;::type</code>,</li>
467      <li><code>index_const_iterator&lt;MultiIndexContainer,Tag&gt;::type</code>,</li>
468      <li><code>multi_index_container&lt;...&gt;::index_const_iterator&lt;Tag&gt;::type</code>.</li>
469    </ul>
470    Use the following instead:
471    <ul>
472      <li><code>nth_index&lt;MultiIndexContainer,N&gt;::type::iterator</code>,</li>
473      <li><code>multi_index_container&lt;...&gt;::nth_index&lt;N&gt;::type::iterator</code>,</li>
474      <li><code>nth_index&lt;MultiIndexContainer,N&gt;::type::const_iterator</code>,</li>
475      <li><code>multi_index_container&lt;...&gt;::nth_index&lt;N&gt;::type::const_iterator</code>,</li>
476      <li><code>index&lt;MultiIndexContainer,Tag&gt;::type::iterator</code>,</li>
477      <li><code>multi_index_container&lt;...&gt;::index&lt;Tag&gt;::type::iterator</code>,</li>
478      <li><code>index&lt;MultiIndexContainer,Tag&gt;::type::const_iterator</code>,</li>
479      <li><code>multi_index_container&lt;...&gt;::index&lt;Tag&gt;::type::const_iterator</code>.</li>
480    </ul>
481  </li>
482  <li>Maintenance fixes.</li>
483</ul>
484</p>
485
486<h2><a name="boost_1_37">Boost 1.37 release</a></h2>
487
488<p>
489<ul>
490  <li>Maintenance fixes.</li>
491</ul>
492</p>
493
494<h2><a name="boost_1_36">Boost 1.36 release</a></h2>
495
496<p>
497<ul>
498  <li><a name="stable_update">On prior versions of the library, the <a href="tutorial/indices.html#hash_updating">update
499  member functions</a> of hashed indices could alter the position of an element even if the
500  associated key did not change with the update. This is legal but probably unexpected behavior.
501  The functions have been rewritten to provide the additional guarantee that elements with
502  unmodified key will not change position in hashed indices, just as always was the case with
503  ordered indices. These guarantees are now documented in the reference.</a></li>
504  <li>Added the constructor <code>multi_index_container::multi_index_container(const allocator_type&amp;)</code>
505  to mimic the equivalent interface in STL sequence containers.
506  <li>Maintenance fixes.</li>
507</ul>
508</p>
509
510<h2><a name="boost_1_35">Boost 1.35 release</a></h2>
511
512<p>
513<ul>
514  <li>New <a href="tutorial/key_extraction.html#global_fun"><code>global_fun</code></a>
515    predefined key extractor.
516  </li>
517  <li>Added <a href="tutorial/indices.html#iterator_to"><code>iterator_to</code></a>
518    facility.
519  </li>
520  <li>Included <a href="tutorial/creation.html#special_allocator">support for
521    non-standard allocators</a> such as those of
522    <a href="../../interprocess/index.html">Boost.Interprocess</a>, which makes
523    <code>multi_index_container</code>s placeable in shared memory.
524  </li>
525  <li>New versions of <code>modify</code> and <code>modify_key</code> with
526   rollback, as described in the
527   <a href="tutorial/basics.html#ord_updating">tutorial</a>.
528  </li>
529  <li>Indices provide the new <code>cbegin</code>, <code>cend</code> and,
530    when applicable, <code>crbegin</code> and <code>crend</code>
531    member functions, in accordance with the latest drafts of the next
532    revision of the C++ standard.
533  </li>
534  <li>Hinted insertion in ordered indices fully conforms to the resolutions of
535    C++ Standard Library
536    <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#233">Defect
537    Report 233</a>. The new requirement that the point of insertion
538    be always as close as possible to the hint induces a different behavior than
539    exhibited in former releases of Boost.MultiIndex, which can potentially cause
540    backwards compatibility problems; in any case, the likelihood of these
541    compatibility issues arising in a real scenario is very low.
542  </li>
543  <li>Sequenced and random access indices now follow the requirements of the
544    C++ standard for sequence containers with respect to the operations
545    <code>assign(f,l)</code> and <code>insert(p,f,l)</code> (23.1.1/9): if
546    <code>f</code> and <code>l</code> are of the same integral type, the
547    iterator-based overloads of these member functions are avoided:
548<blockquote><pre>
549<span class=keyword>typedef</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span>
550  <span class=keyword>int</span><span class=special>,</span><span class=identifier>indexed_by</span><span class=special>&lt;</span><span class=identifier>sequenced</span><span class=special>&lt;&gt;</span> <span class=special>&gt;</span>
551<span class=special>&gt;</span> <span class=identifier>sequenced_container</span><span class=special>;</span>
552
553<span class=identifier>std</span><span class=special>::</span><span class=identifier>list</span><span class=special>&lt;</span><span class=keyword>int</span><span class=special>&gt;</span>      <span class=identifier>l</span><span class=special>(...);</span>
554<span class=identifier>sequenced_container</span> <span class=identifier>c</span><span class=special>;</span>
555
556<span class=comment>// iterator-based overload of assign</span>
557<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>
558
559<span class=comment>// The following is equivalent to
560//   c.assign(
561//      static_cast&lt;sequenced_container::size_type&gt;(10),100);
562// that is, &quot;10&quot; and &quot;100&quot; are not taken to be iterators as
563// in the previous expression.</span>
564<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>
565</pre></blockquote>
566  </li>
567  <li>The performance of ordered indices <code>range</code> and
568    <code>equal_range</code> has been improved.
569  </li>
570  <li>Maintenance fixes.</li>
571</ul>
572</p>
573
574<h2><a name="boost_1_34">Boost 1.34 release</a></h2>
575
576<p>
577<ul>
578  <li>Added <a href="tutorial/indices.html#rnd_indices">random access
579    indices</a>.
580  </li>
581  <li>Non key-based indices provide new
582    <a href="tutorial/indices.html#rearrange">rearrange facilities</a>
583    allowing for interaction with external mutating algorithms.
584  </li>
585  <li>All predefined Boost.MultiIndex key extractors
586    instantiated for a given type <code>T</code> can handle objects of types
587    derived from or convertible to <code>T</code> (and
588    <a href="reference/key_extraction.html#chained_pointers">chained pointers</a>
589    to those). Previously, only objects of the exact type specified (along with
590    <code>reference_wrapper</code>s and chained pointers to them) were accepted.
591  </li>
592  <li><a href="reference/key_extraction.html#composite_key_compare"><code>composite_key_compare</code></a>
593    and related classes accept operands not included in tuples as if they were passed
594    in a tuple of length 1; this allows the user to omit tuple enclosing in
595    lookup operations involving composite keys when only the first key is provided.
596  </li>
597  <li>The core algorithms of ordered indices have been optimized, yielding
598    an estimated reduction of about 5% in insertion times.
599  </li>
600  <li>Size of ordered indices node headers have been reduced by 25% on
601    most platforms, using a well known
602    <a href="tutorial/indices.html#ordered_node_compression">optimization
603    technique</a>.
604  </li>
605  <li>The tutorial has been restructured, new examples added.</li>
606  <li>Maintenance fixes.</li>
607</ul>
608</p>
609
610<h2><a name="boost_1_33_1">Boost 1.33.1 release</a></h2>
611
612<p>
613<ul>
614  <li>For ordered and hashed indices, <code>erase(it)</code> and
615    <code>erase(first,last)</code> now return an iterator to the element
616    following those being deleted (previously nothing was returned), in
617    accordance with the C++ Standard Library
618    <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#130">Defect
619    Report 130</a> and issue 6.19 of TR1
620    <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1837.pdf">Issues
621    List</a>.
622  </li>
623  <li>Boost.MultiIndex offers the usual guarantees with respect to
624    multithreading code provided by most STL implementations:
625    <ol>
626      <li>Concurrent access to different containers is safe.</li>
627      <li>Concurrent read-only access to the same container is safe.</li>
628    </ol>
629    In previous versions of the library, the latter guarantee was not properly
630    maintained if the <a href="tutorial/debug.html#safe_mode">safe
631    mode</a> was set. This problem has been fixed now.
632  </li>
633  <li>Maintenance fixes.</li>
634</ul>
635</p>
636
637<h2><a name="boost_1_33">Boost 1.33 release</a></h2>
638
639<p>
640<ul>
641  <li>Added <a href="tutorial/indices.html#hashed_indices">hashed indices</a>,
642    whose interface is based on the specification for unordered associative
643    containers by the C++ Standard Library Technical Report (TR1).
644  </li>
645  <li>Added <a href="tutorial/creation.html#serialization">serialization support</a>
646    for <a href="../../serialization/index.html">Boost.Serialization</a>.
647  </li>
648  <li>Destruction of <code>multi_index_container</code>s and <code>clear</code>
649    memfuns now perform faster.
650  </li>
651  <li>Internal changes aimed at reducing the length of symbol names generated
652    by the compiler; cuts of up to a 50% can be achieved with respect to the
653    Boost 1.32 release. This results in much shorter and more readable error
654    messages and has also a beneficial impact on compilers with strict limits on
655    symbol name lengths. Additionally, a section on further
656    <a href="compiler_specifics.html#symbol_reduction">reduction of symbol name
657    lengths</a> has been added.
658  </li>
659  <li>Restructured some parts of the documentation, new examples.</li>
660  <li>Maintenance fixes.</li>
661</ul>
662</p>
663
664<hr>
665
666<div class="prev_link"><a href="future_work.html"><img src="prev.gif" alt="future work" border="0"><br>
667Future work
668</a></div>
669<div class="up_link"><a href="index.html"><img src="up.gif" alt="index" border="0"><br>
670Index
671</a></div>
672<div class="next_link"><a href="acknowledgements.html"><img src="next.gif" alt="acknowledgements" border="0"><br>
673Acknowledgements
674</a></div><br clear="all" style="clear: all;">
675
676<br>
677
678<p>Revised June 6th 2020</p>
679
680<p>&copy; Copyright 2003-2020 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
681Distributed under the Boost Software
682License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt">
683LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
684http://www.boost.org/LICENSE_1_0.txt</a>)
685</p>
686
687</body>
688</html>
689