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é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&</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>&){</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><</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><</span> 249 <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> 250 <span class=special>></span> 251<span class=special>></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>"boost"</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<T></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<MultiIndexContainer,N>::type</code>,</li> 462 <li><code>multi_index_container<...>::nth_index_iterator<N>::type</code>,</li> 463 <li><code>nth_index_const_iterator<MultiIndexContainer,N>::type</code>,</li> 464 <li><code>multi_index_container<...>::nth_index_const_iterator<N>::type</code>,</li> 465 <li><code>index_iterator<MultiIndexContainer,Tag>::type</code>,</li> 466 <li><code>multi_index_container<...>::index_iterator<Tag>::type</code>,</li> 467 <li><code>index_const_iterator<MultiIndexContainer,Tag>::type</code>,</li> 468 <li><code>multi_index_container<...>::index_const_iterator<Tag>::type</code>.</li> 469 </ul> 470 Use the following instead: 471 <ul> 472 <li><code>nth_index<MultiIndexContainer,N>::type::iterator</code>,</li> 473 <li><code>multi_index_container<...>::nth_index<N>::type::iterator</code>,</li> 474 <li><code>nth_index<MultiIndexContainer,N>::type::const_iterator</code>,</li> 475 <li><code>multi_index_container<...>::nth_index<N>::type::const_iterator</code>,</li> 476 <li><code>index<MultiIndexContainer,Tag>::type::iterator</code>,</li> 477 <li><code>multi_index_container<...>::index<Tag>::type::iterator</code>,</li> 478 <li><code>index<MultiIndexContainer,Tag>::type::const_iterator</code>,</li> 479 <li><code>multi_index_container<...>::index<Tag>::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&)</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><</span> 550 <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> 551<span class=special>></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><</span><span class=keyword>int</span><span class=special>></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<sequenced_container::size_type>(10),100); 562// that is, "10" and "100" 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>© Copyright 2003-2020 Joaquín M López Muñ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