release_notes.html 27 KB

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