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