1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2<html> 3<head> 4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5<title>Change Log</title> 6<link rel="stylesheet" href="../../../doc/src/boostbook.css" type="text/css"> 7<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 8<link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset"> 9<link rel="up" href="../unordered.html" title="Chapter 44. Boost.Unordered"> 10<link rel="prev" href="rationale.html" title="Implementation Rationale"> 11<link rel="next" href="reference.html" title="Reference"> 12</head> 13<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 14<table cellpadding="2" width="100%"><tr> 15<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td> 16<td align="center"><a href="../../../index.html">Home</a></td> 17<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td> 18<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> 19<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> 20<td align="center"><a href="../../../more/index.htm">More</a></td> 21</tr></table> 22<hr> 23<div class="spirit-nav"> 24<a accesskey="p" href="rationale.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../unordered.html"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="reference.html"><img src="../../../doc/src/images/next.png" alt="Next"></a> 25</div> 26<div class="section"> 27<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 28<a name="unordered.changes"></a><a class="link" href="changes.html" title="Change Log">Change Log</a> 29</h2></div></div></div> 30<h3> 31<a name="unordered.changes.h0"></a> 32 <span class="phrase"><a name="unordered.changes.review_version"></a></span><a class="link" href="changes.html#unordered.changes.review_version">Review 33 Version</a> 34 </h3> 35<p> 36 Initial review version, for the review conducted from 7th December 2007 to 37 16th December 2007. 38 </p> 39<h3> 40<a name="unordered.changes.h1"></a> 41 <span class="phrase"><a name="unordered.changes.1_35_0_add_on___31st_march_2008"></a></span><a class="link" href="changes.html#unordered.changes.1_35_0_add_on___31st_march_2008">1.35.0 42 Add-on - 31st March 2008</a> 43 </h3> 44<p> 45 Unofficial release uploaded to vault, to be used with Boost 1.35.0. Incorporated 46 many of the suggestions from the review. 47 </p> 48<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 49<li class="listitem"> 50 Improved portability thanks to Boost regression testing. 51 </li> 52<li class="listitem"> 53 Fix lots of typos, and clearer text in the documentation. 54 </li> 55<li class="listitem"> 56 Fix floating point to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span></code> 57 conversion when calculating sizes from the max load factor, and use <code class="computeroutput"><span class="keyword">double</span></code> in the calculation for greater accuracy. 58 </li> 59<li class="listitem"> 60 Fix some errors in the examples. 61 </li> 62</ul></div> 63<h3> 64<a name="unordered.changes.h2"></a> 65 <span class="phrase"><a name="unordered.changes.boost_1_36_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_36_0">Boost 66 1.36.0</a> 67 </h3> 68<p> 69 First official release. 70 </p> 71<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 72<li class="listitem"> 73 Rearrange the internals. 74 </li> 75<li class="listitem"> 76 Move semantics - full support when rvalue references are available, emulated 77 using a cut down version of the Adobe move library when they are not. 78 </li> 79<li class="listitem"> 80 Emplace support when rvalue references and variadic template are available. 81 </li> 82<li class="listitem"> 83 More efficient node allocation when rvalue references and variadic template 84 are available. 85 </li> 86<li class="listitem"> 87 Added equality operators. 88 </li> 89</ul></div> 90<h3> 91<a name="unordered.changes.h3"></a> 92 <span class="phrase"><a name="unordered.changes.boost_1_37_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_37_0">Boost 93 1.37.0</a> 94 </h3> 95<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 96<li class="listitem"> 97 Rename overload of <code class="computeroutput"><span class="identifier">emplace</span></code> 98 with hint, to <code class="computeroutput"><span class="identifier">emplace_hint</span></code> 99 as specified in <a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2691.pdf" target="_top">n2691</a>. 100 </li> 101<li class="listitem"> 102 Provide forwarding headers at <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">unordered</span><span class="special">/</span><span class="identifier">unordered_map_fwd</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 103 and <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">unordered</span><span class="special">/</span><span class="identifier">unordered_set_fwd</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>. 104 </li> 105<li class="listitem"> 106 Move all the implementation inside <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">unordered</span></code>, 107 to assist modularization and hopefully make it easier to track changes 108 in subversion. 109 </li> 110</ul></div> 111<h3> 112<a name="unordered.changes.h4"></a> 113 <span class="phrase"><a name="unordered.changes.boost_1_38_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_38_0">Boost 114 1.38.0</a> 115 </h3> 116<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 117<li class="listitem"> 118 Use <a href="../../../libs/core/swap.html" target="_top"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">swap</span></code></a>. 119 </li> 120<li class="listitem"> 121 <a href="https://svn.boost.org/trac/boost/ticket/2237" target="_top">Ticket 2237</a>: 122 Document that the equality and inequality operators are undefined for two 123 objects if their equality predicates aren't equivalent. Thanks to Daniel 124 Krügler. 125 </li> 126<li class="listitem"> 127 <a href="https://svn.boost.org/trac/boost/ticket/1710" target="_top">Ticket 1710</a>: 128 Use a larger prime number list. Thanks to Thorsten Ottosen and Hervé Brönnimann. 129 </li> 130<li class="listitem"> 131 Use <a href="../../../libs/type_traits/doc/html/boost_typetraits/category/alignment.html" target="_top">aligned 132 storage</a> to store the types. This changes the way the allocator 133 is used to construct nodes. It used to construct the node with two calls 134 to the allocator's <code class="computeroutput"><span class="identifier">construct</span></code> 135 method - once for the pointers and once for the value. It now constructs 136 the node with a single call to construct and then constructs the value 137 using in place construction. 138 </li> 139<li class="listitem"> 140 Add support for C++0x initializer lists where they're available (currently 141 only g++ 4.4 in C++0x mode). 142 </li> 143</ul></div> 144<h3> 145<a name="unordered.changes.h5"></a> 146 <span class="phrase"><a name="unordered.changes.boost_1_39_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_39_0">Boost 147 1.39.0</a> 148 </h3> 149<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 150<li class="listitem"> 151 <a href="https://svn.boost.org/trac/boost/ticket/2756" target="_top">Ticket 2756</a>: 152 Avoid a warning on Visual C++ 2009. 153 </li> 154<li class="listitem"> 155 Some other minor internal changes to the implementation, tests and documentation. 156 </li> 157<li class="listitem"> 158 Avoid an unnecessary copy in <code class="computeroutput"><span class="keyword">operator</span><span class="special">[]</span></code>. 159 </li> 160<li class="listitem"> 161 <a href="https://svn.boost.org/trac/boost/ticket/2975" target="_top">Ticket 2975</a>: 162 Fix length of prime number list. 163 </li> 164</ul></div> 165<h3> 166<a name="unordered.changes.h6"></a> 167 <span class="phrase"><a name="unordered.changes.boost_1_40_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_40_0">Boost 168 1.40.0</a> 169 </h3> 170<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 171<li class="listitem"> 172 <a href="https://svn.boost.org/trac/boost/ticket/2975" target="_top">Ticket 2975</a>: 173 Store the prime list as a preprocessor sequence - so that it will always 174 get the length right if it changes again in the future. 175 </li> 176<li class="listitem"> 177 <a href="https://svn.boost.org/trac/boost/ticket/1978" target="_top">Ticket 1978</a>: 178 Implement <code class="computeroutput"><span class="identifier">emplace</span></code> for all 179 compilers. 180 </li> 181<li class="listitem"> 182 <a href="https://svn.boost.org/trac/boost/ticket/2908" target="_top">Ticket 2908</a>, 183 <a href="https://svn.boost.org/trac/boost/ticket/3096" target="_top">Ticket 3096</a>: 184 Some workarounds for old versions of borland, including adding explicit 185 destructors to all containers. 186 </li> 187<li class="listitem"> 188 <a href="https://svn.boost.org/trac/boost/ticket/3082" target="_top">Ticket 3082</a>: 189 Disable incorrect Visual C++ warnings. 190 </li> 191<li class="listitem"> 192 Better configuration for C++0x features when the headers aren't available. 193 </li> 194<li class="listitem"> 195 Create less buckets by default. 196 </li> 197</ul></div> 198<h3> 199<a name="unordered.changes.h7"></a> 200 <span class="phrase"><a name="unordered.changes.boost_1_41_0___major_update"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_41_0___major_update">Boost 201 1.41.0 - Major update</a> 202 </h3> 203<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 204<li class="listitem"> 205 The original version made heavy use of macros to sidestep some of the older 206 compilers' poor template support. But since I no longer support those compilers 207 and the macro use was starting to become a maintenance burden it has been 208 rewritten to use templates instead of macros for the implementation classes. 209 </li> 210<li class="listitem"> 211 The container object is now smaller thanks to using <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">compressed_pair</span></code> 212 for EBO and a slightly different function buffer - now using a bool instead 213 of a member pointer. 214 </li> 215<li class="listitem"> 216 Buckets are allocated lazily which means that constructing an empty container 217 will not allocate any memory. 218 </li> 219</ul></div> 220<h3> 221<a name="unordered.changes.h8"></a> 222 <span class="phrase"><a name="unordered.changes.boost_1_42_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_42_0">Boost 223 1.42.0</a> 224 </h3> 225<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 226<li class="listitem"> 227 Support instantiating the containers with incomplete value types. 228 </li> 229<li class="listitem"> 230 Reduced the number of warnings (mostly in tests). 231 </li> 232<li class="listitem"> 233 Improved codegear compatibility. 234 </li> 235<li class="listitem"> 236 <a href="http://svn.boost.org/trac/boost/ticket/3693" target="_top">Ticket 3693</a>: 237 Add <code class="computeroutput"><span class="identifier">erase_return_void</span></code> as 238 a temporary workaround for the current <code class="computeroutput"><span class="identifier">erase</span></code> 239 which can be inefficient because it has to find the next element to return 240 an iterator. 241 </li> 242<li class="listitem"> 243 Add templated find overload for compatible keys. 244 </li> 245<li class="listitem"> 246 <a href="http://svn.boost.org/trac/boost/ticket/3773" target="_top">Ticket 3773</a>: 247 Add missing <code class="computeroutput"><span class="identifier">std</span></code> qualifier 248 to <code class="computeroutput"><span class="identifier">ptrdiff_t</span></code>. 249 </li> 250<li class="listitem"> 251 Some code formatting changes to fit almost all lines into 80 characters. 252 </li> 253</ul></div> 254<h3> 255<a name="unordered.changes.h9"></a> 256 <span class="phrase"><a name="unordered.changes.boost_1_43_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_43_0">Boost 257 1.43.0</a> 258 </h3> 259<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 260<li class="listitem"> 261 <a href="http://svn.boost.org/trac/boost/ticket/3966" target="_top">Ticket 3966</a>: 262 <code class="computeroutput"><span class="identifier">erase_return_void</span></code> is now 263 <code class="computeroutput"><span class="identifier">quick_erase</span></code>, which is the 264 <a href="http://home.roadrunner.com/~hinnant/issue_review/lwg-active.html#579" target="_top">current 265 forerunner for resolving the slow erase by iterator</a>, although there's 266 a strong possibility that this may change in the future. The old method 267 name remains for backwards compatibility but is considered deprecated and 268 will be removed in a future release. 269 </li> 270<li class="listitem"> 271 Use Boost.Exception. 272 </li> 273<li class="listitem"> 274 Stop using deprecated <code class="computeroutput"><span class="identifier">BOOST_HAS_</span><span class="special">*</span></code> macros. 275 </li> 276</ul></div> 277<h3> 278<a name="unordered.changes.h10"></a> 279 <span class="phrase"><a name="unordered.changes.boost_1_45_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_45_0">Boost 280 1.45.0</a> 281 </h3> 282<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 283 Fix a bug when inserting into an <code class="computeroutput"><span class="identifier">unordered_map</span></code> 284 or <code class="computeroutput"><span class="identifier">unordered_set</span></code> using 285 iterators which returns <code class="computeroutput"><span class="identifier">value_type</span></code> 286 by copy. 287 </li></ul></div> 288<h3> 289<a name="unordered.changes.h11"></a> 290 <span class="phrase"><a name="unordered.changes.boost_1_48_0___major_update"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_48_0___major_update">Boost 291 1.48.0 - Major update</a> 292 </h3> 293<p> 294 This is major change which has been converted to use Boost.Move's move emulation, 295 and be more compliant with the C++11 standard. See the <a class="link" href="compliance.html" title="Standard Compliance">compliance 296 section</a> for details. 297 </p> 298<p> 299 The container now meets C++11's complexity requirements, but to do so uses 300 a little more memory. This means that <code class="computeroutput"><span class="identifier">quick_erase</span></code> 301 and <code class="computeroutput"><span class="identifier">erase_return_void</span></code> are no 302 longer required, they'll be removed in a future version. 303 </p> 304<p> 305 C++11 support has resulted in some breaking changes: 306 </p> 307<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 308<li class="listitem"> 309 Equality comparison has been changed to the C++11 specification. In a container 310 with equivalent keys, elements in a group with equal keys used to have 311 to be in the same order to be considered equal, now they can be a permutation 312 of each other. To use the old behavior define the macro <code class="computeroutput"><span class="identifier">BOOST_UNORDERED_DEPRECATED_EQUALITY</span></code>. 313 </li> 314<li class="listitem"> 315 The behaviour of swap is different when the two containers to be swapped 316 has unequal allocators. It used to allocate new nodes using the appropriate 317 allocators, it now swaps the allocators if the allocator has a member structure 318 <code class="computeroutput"><span class="identifier">propagate_on_container_swap</span></code>, 319 such that <code class="computeroutput"><span class="identifier">propagate_on_container_swap</span><span class="special">::</span><span class="identifier">value</span></code> 320 is true. 321 </li> 322<li class="listitem"> 323 Allocator's <code class="computeroutput"><span class="identifier">construct</span></code> and 324 <code class="computeroutput"><span class="identifier">destroy</span></code> functions are called 325 with raw pointers, rather than the allocator's <code class="computeroutput"><span class="identifier">pointer</span></code> 326 type. 327 </li> 328<li class="listitem"> 329 <code class="computeroutput"><span class="identifier">emplace</span></code> used to emulate 330 the variadic pair constructors that appeared in early C++0x drafts. Since 331 they were removed it no longer does so. It does emulate the new <code class="computeroutput"><span class="identifier">piecewise_construct</span></code> pair constructors 332 - only you need to use <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">piecewise_construct</span></code>. 333 To use the old emulation of the variadic constructors define <code class="computeroutput"><span class="identifier">BOOST_UNORDERED_DEPRECATED_PAIR_CONSTRUCT</span></code>. 334 </li> 335</ul></div> 336<h3> 337<a name="unordered.changes.h12"></a> 338 <span class="phrase"><a name="unordered.changes.boost_1_49_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_49_0">Boost 339 1.49.0</a> 340 </h3> 341<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 342<li class="listitem"> 343 Fix warning due to accidental odd assignment. 344 </li> 345<li class="listitem"> 346 Slightly better error messages. 347 </li> 348</ul></div> 349<h3> 350<a name="unordered.changes.h13"></a> 351 <span class="phrase"><a name="unordered.changes.boost_1_50_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_50_0">Boost 352 1.50.0</a> 353 </h3> 354<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 355<li class="listitem"> 356 Fix equality for <code class="computeroutput"><span class="identifier">unordered_multiset</span></code> 357 and <code class="computeroutput"><span class="identifier">unordered_multimap</span></code>. 358 </li> 359<li class="listitem"> 360 <a href="https://svn.boost.org/trac/boost/ticket/6857" target="_top">Ticket 6857</a>: 361 Implement <code class="computeroutput"><span class="identifier">reserve</span></code>. 362 </li> 363<li class="listitem"> 364 <a href="https://svn.boost.org/trac/boost/ticket/6771" target="_top">Ticket 6771</a>: 365 Avoid gcc's <code class="computeroutput"><span class="special">-</span><span class="identifier">Wfloat</span><span class="special">-</span><span class="identifier">equal</span></code> 366 warning. 367 </li> 368<li class="listitem"> 369 <a href="https://svn.boost.org/trac/boost/ticket/6784" target="_top">Ticket 6784</a>: 370 Fix some Sun specific code. 371 </li> 372<li class="listitem"> 373 <a href="https://svn.boost.org/trac/boost/ticket/6190" target="_top">Ticket 6190</a>: 374 Avoid gcc's <code class="computeroutput"><span class="special">-</span><span class="identifier">Wshadow</span></code> 375 warning. 376 </li> 377<li class="listitem"> 378 <a href="https://svn.boost.org/trac/boost/ticket/6905" target="_top">Ticket 6905</a>: 379 Make namespaces in macros compatible with <code class="computeroutput"><span class="identifier">bcp</span></code> 380 custom namespaces. Fixed by Luke Elliott. 381 </li> 382<li class="listitem"> 383 Remove some of the smaller prime number of buckets, as they may make collisions 384 quite probable (e.g. multiples of 5 are very common because we used base 385 10). 386 </li> 387<li class="listitem"> 388 On old versions of Visual C++, use the container library's implementation 389 of <code class="computeroutput"><span class="identifier">allocator_traits</span></code>, as 390 it's more likely to work. 391 </li> 392<li class="listitem"> 393 On machines with 64 bit std::size_t, use power of 2 buckets, with Thomas 394 Wang's hash function to pick which one to use. As modulus is very slow 395 for 64 bit values. 396 </li> 397<li class="listitem"> 398 Some internal changes. 399 </li> 400</ul></div> 401<h3> 402<a name="unordered.changes.h14"></a> 403 <span class="phrase"><a name="unordered.changes.boost_1_51_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_51_0">Boost 404 1.51.0</a> 405 </h3> 406<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 407<li class="listitem"> 408 Fix construction/destruction issue when using a C++11 compiler with a C++03 409 allocator (<a href="https://svn.boost.org/trac/boost/ticket/7100" target="_top">#7100</a>). 410 </li> 411<li class="listitem"> 412 Remove a <code class="computeroutput"><span class="keyword">try</span><span class="special">..</span><span class="keyword">catch</span></code> to support compiling without exceptions. 413 </li> 414<li class="listitem"> 415 Adjust SFINAE use to try to support g++ 3.4 (<a href="https://svn.boost.org/trac/boost/ticket/7175" target="_top">#7175</a>). 416 </li> 417<li class="listitem"> 418 Updated to use the new config macros. 419 </li> 420</ul></div> 421<h3> 422<a name="unordered.changes.h15"></a> 423 <span class="phrase"><a name="unordered.changes.boost_1_52_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_52_0">Boost 424 1.52.0</a> 425 </h3> 426<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 427<li class="listitem"> 428 Faster assign, which assigns to existing nodes where possible, rather than 429 creating entirely new nodes and copy constructing. 430 </li> 431<li class="listitem"> 432 Fixed bug in <code class="computeroutput"><span class="identifier">erase_range</span></code> 433 (<a href="https://svn.boost.org/trac/boost/ticket/7471" target="_top">#7471</a>). 434 </li> 435<li class="listitem"> 436 Reverted some of the internal changes to how nodes are created, especially 437 for C++11 compilers. 'construct' and 'destroy' should work a little better 438 for C++11 allocators. 439 </li> 440<li class="listitem"> 441 Simplified the implementation a bit. Hopefully more robust. 442 </li> 443</ul></div> 444<h3> 445<a name="unordered.changes.h16"></a> 446 <span class="phrase"><a name="unordered.changes.boost_1_53_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_53_0">Boost 447 1.53.0</a> 448 </h3> 449<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 450<li class="listitem"> 451 Remove support for the old pre-standard variadic pair constructors, and 452 equality implementation. Both have been deprecated since Boost 1.48. 453 </li> 454<li class="listitem"> 455 Remove use of deprecated config macros. 456 </li> 457<li class="listitem"> 458 More internal implementation changes, including a much simpler implementation 459 of <code class="computeroutput"><span class="identifier">erase</span></code>. 460 </li> 461</ul></div> 462<h3> 463<a name="unordered.changes.h17"></a> 464 <span class="phrase"><a name="unordered.changes.boost_1_54_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_54_0">Boost 465 1.54.0</a> 466 </h3> 467<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 468<li class="listitem"> 469 Mark methods specified in standard as <code class="computeroutput"><span class="identifier">noexpect</span></code>. 470 More to come in the next release. 471 </li> 472<li class="listitem"> 473 If the hash function and equality predicate are known to both have nothrow 474 move assignment or construction then use them. 475 </li> 476</ul></div> 477<h3> 478<a name="unordered.changes.h18"></a> 479 <span class="phrase"><a name="unordered.changes.boost_1_55_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_55_0">Boost 480 1.55.0</a> 481 </h3> 482<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 483<li class="listitem"> 484 Avoid some warnings (<a href="https://svn.boost.org/trac/boost/ticket/8851" target="_top">#8851</a>, <a href="https://svn.boost.org/trac/boost/ticket/8874" target="_top">#8874</a>). 485 </li> 486<li class="listitem"> 487 Avoid exposing some detail functions via. ADL on the iterators. 488 </li> 489<li class="listitem"> 490 Follow the standard by only using the allocators' construct and destroy 491 methods to construct and destroy stored elements. Don't use them for internal 492 data like pointers. 493 </li> 494</ul></div> 495<h3> 496<a name="unordered.changes.h19"></a> 497 <span class="phrase"><a name="unordered.changes.boost_1_56_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_56_0">Boost 498 1.56.0</a> 499 </h3> 500<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 501<li class="listitem"> 502 Fix some shadowed variable warnings (<a href="https://svn.boost.org/trac/boost/ticket/9377" target="_top">#9377</a>). 503 </li> 504<li class="listitem"> 505 Fix allocator use in documentation (<a href="https://svn.boost.org/trac/boost/ticket/9719" target="_top">#9719</a>). 506 </li> 507<li class="listitem"> 508 Always use prime number of buckets for integers. Fixes performance regression 509 when inserting consecutive integers, although makes other uses slower (<a href="https://svn.boost.org/trac/boost/ticket/9282" target="_top">#9282</a>). 510 </li> 511<li class="listitem"> 512 Only construct elements using allocators, as specified in C++11 standard. 513 </li> 514</ul></div> 515<h3> 516<a name="unordered.changes.h20"></a> 517 <span class="phrase"><a name="unordered.changes.boost_1_57_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_57_0">Boost 518 1.57.0</a> 519 </h3> 520<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 521<li class="listitem"> 522 Fix the <code class="computeroutput"><span class="identifier">pointer</span></code> typedef 523 in iterators (<a href="https://svn.boost.org/trac/boost/ticket/10672" target="_top">#10672</a>). 524 </li> 525<li class="listitem"> 526 Fix Coverity warning (<a href="https://github.com/boostorg/unordered/pull/2" target="_top">GitHub 527 #2</a>). 528 </li> 529</ul></div> 530<h3> 531<a name="unordered.changes.h21"></a> 532 <span class="phrase"><a name="unordered.changes.boost_1_58_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_58_0">Boost 533 1.58.0</a> 534 </h3> 535<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 536<li class="listitem"> 537 Remove unnecessary template parameter from const iterators. 538 </li> 539<li class="listitem"> 540 Rename private <code class="computeroutput"><span class="identifier">iterator</span></code> 541 typedef in some iterator classes, as it confuses some traits classes. 542 </li> 543<li class="listitem"> 544 Fix move assignment with stateful, propagate_on_container_move_assign allocators 545 (<a href="https://svn.boost.org/trac/boost/ticket/10777" target="_top">#10777</a>). 546 </li> 547<li class="listitem"> 548 Fix rare exception safety issue in move assignment. 549 </li> 550<li class="listitem"> 551 Fix potential overflow when calculating number of buckets to allocate (<a href="https://github.com/boostorg/unordered/pull/4" target="_top">GitHub #4</a>). 552 </li> 553</ul></div> 554<h3> 555<a name="unordered.changes.h22"></a> 556 <span class="phrase"><a name="unordered.changes.boost_1_62_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_62_0">Boost 557 1.62.0</a> 558 </h3> 559<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 560<li class="listitem"> 561 Remove use of deprecated <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator</span></code>. 562 </li> 563<li class="listitem"> 564 Remove <code class="computeroutput"><span class="identifier">BOOST_NO_STD_DISTANCE</span></code> 565 workaround. 566 </li> 567<li class="listitem"> 568 Remove <code class="computeroutput"><span class="identifier">BOOST_UNORDERED_DEPRECATED_EQUALITY</span></code> 569 warning. 570 </li> 571<li class="listitem"> 572 Simpler implementation of assignment, fixes an exception safety issue for 573 <code class="computeroutput"><span class="identifier">unordered_multiset</span></code> and 574 <code class="computeroutput"><span class="identifier">unordered_multimap</span></code>. Might 575 be a little slower. 576 </li> 577<li class="listitem"> 578 Stop using return value SFINAE which some older compilers have issues with. 579 </li> 580</ul></div> 581<h3> 582<a name="unordered.changes.h23"></a> 583 <span class="phrase"><a name="unordered.changes.boost_1_63_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_63_0">Boost 584 1.63.0</a> 585 </h3> 586<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 587<li class="listitem"> 588 Check hint iterator in <code class="computeroutput"><span class="identifier">insert</span></code>/<code class="computeroutput"><span class="identifier">emplace_hint</span></code>. 589 </li> 590<li class="listitem"> 591 Fix some warnings, mostly in the tests. 592 </li> 593<li class="listitem"> 594 Manually write out <code class="computeroutput"><span class="identifier">emplace_args</span></code> 595 for small numbers of arguments - should make template error messages a 596 little more bearable. 597 </li> 598<li class="listitem"> 599 Remove superfluous use of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">forward</span></code> 600 in emplace arguments, which fixes emplacing string literals in old versions 601 of Visual C++. 602 </li> 603<li class="listitem"> 604 Fix an exception safety issue in assignment. If bucket allocation throws 605 an exception, it can overwrite the hash and equality functions while leaving 606 the existing elements in place. This would mean that the function objects 607 wouldn't match the container elements, so elements might be in the wrong 608 bucket and equivalent elements would be incorrectly handled. 609 </li> 610<li class="listitem"> 611 Various reference documentation improvements. 612 </li> 613<li class="listitem"> 614 Better allocator support (<a href="https://svn.boost.org/trac/boost/ticket/12459" target="_top">#12459</a>). 615 </li> 616<li class="listitem"> 617 Make the no argument constructors implicit. 618 </li> 619<li class="listitem"> 620 Implement missing allocator aware constructors. 621 </li> 622<li class="listitem"> 623 Fix assigning the hash/key equality functions for empty containers. 624 </li> 625<li class="listitem"> 626 Remove unary/binary_function from the examples in the documentation. They 627 are removed in C++17. 628 </li> 629<li class="listitem"> 630 Support 10 constructor arguments in emplace. It was meant to support up 631 to 10 arguments, but an off by one error in the preprocessor code meant 632 it only supported up to 9. 633 </li> 634</ul></div> 635<h3> 636<a name="unordered.changes.h24"></a> 637 <span class="phrase"><a name="unordered.changes.boost_1_64_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_64_0">Boost 638 1.64.0</a> 639 </h3> 640<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 641<li class="listitem"> 642 Initial support for new C++17 member functions: <code class="computeroutput"><span class="identifier">insert_or_assign</span></code> 643 and <code class="computeroutput"><span class="identifier">try_emplace</span></code> in <code class="computeroutput"><span class="identifier">unordered_map</span></code>, 644 </li> 645<li class="listitem"> 646 Initial support for <code class="computeroutput"><span class="identifier">merge</span></code> 647 and <code class="computeroutput"><span class="identifier">extract</span></code>. Does not include 648 transferring nodes between <code class="computeroutput"><span class="identifier">unordered_map</span></code> 649 and <code class="computeroutput"><span class="identifier">unordered_multimap</span></code> 650 or between <code class="computeroutput"><span class="identifier">unordered_set</span></code> 651 and <code class="computeroutput"><span class="identifier">unordered_multiset</span></code> 652 yet. That will hopefully be in the next version of Boost. 653 </li> 654</ul></div> 655<h3> 656<a name="unordered.changes.h25"></a> 657 <span class="phrase"><a name="unordered.changes.boost_1_65_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_65_0">Boost 658 1.65.0</a> 659 </h3> 660<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 661<li class="listitem"> 662 Add deprecated attributes to <code class="computeroutput"><span class="identifier">quick_erase</span></code> 663 and <code class="computeroutput"><span class="identifier">erase_return_void</span></code>. 664 I really will remove them in a future version this time. 665 </li> 666<li class="listitem"> 667 Small standards compliance fixes: 668 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "> 669<li class="listitem"> 670 <code class="computeroutput"><span class="identifier">noexpect</span></code> specs for 671 <code class="computeroutput"><span class="identifier">swap</span></code> free functions. 672 </li> 673<li class="listitem"> 674 Add missing <code class="computeroutput"><span class="identifier">insert</span><span class="special">(</span><span class="identifier">P</span><span class="special">&&)</span></code> methods. 675 </li> 676</ul></div> 677 </li> 678</ul></div> 679<h3> 680<a name="unordered.changes.h26"></a> 681 <span class="phrase"><a name="unordered.changes.boost_1_66_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_66_0">Boost 682 1.66.0</a> 683 </h3> 684<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 685<li class="listitem"> 686 Simpler move construction implementation. 687 </li> 688<li class="listitem"> 689 Documentation fixes (<a href="https://github.com/boostorg/unordered/pull/6" target="_top">GitHub 690 #6</a>). 691 </li> 692</ul></div> 693<h3> 694<a name="unordered.changes.h27"></a> 695 <span class="phrase"><a name="unordered.changes.boost_1_67_0"></a></span><a class="link" href="changes.html#unordered.changes.boost_1_67_0">Boost 696 1.67.0</a> 697 </h3> 698<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 699<li class="listitem"> 700 Improved C++17 support: 701 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "> 702<li class="listitem"> 703 Add template deduction guides from the standard. 704 </li> 705<li class="listitem"> 706 Use a simple implementation of <code class="computeroutput"><span class="identifier">optional</span></code> 707 in node handles, so that they're closer to the standard. 708 </li> 709<li class="listitem"> 710 Add missing <code class="computeroutput"><span class="keyword">noexcept</span></code> 711 specifications to <code class="computeroutput"><span class="identifier">swap</span></code>, 712 <code class="computeroutput"><span class="keyword">operator</span><span class="special">=</span></code> 713 and node handles, and change the implementation to match. Using 714 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_traits</span><span class="special">::</span><span class="identifier">is_always_equal</span></code>, or our own implementation 715 when not available, and <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_nothrow_swappable</span></code> 716 in the implementation. 717 </li> 718</ul></div> 719 </li> 720<li class="listitem"> 721 Improved C++20 support: 722 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"> 723 Use <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">to_address</span></code>, which has the proposed 724 C++20 semantics, rather than the old custom implementation. 725 </li></ul></div> 726 </li> 727<li class="listitem"> 728 Add <code class="computeroutput"><span class="identifier">element_type</span></code> to iterators, 729 so that <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pointer_traits</span></code> will work. 730 </li> 731<li class="listitem"> 732 Use <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">piecewise_construct</span></code> on recent versions 733 of Visual C++, and other uses of the Dinkumware standard library, now using 734 Boost.Predef to check compiler and library versions. 735 </li> 736<li class="listitem"> 737 Use <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator_traits</span></code> rather than the boost 738 iterator traits in order to remove dependency on Boost.Iterator. 739 </li> 740<li class="listitem"> 741 Remove iterators' inheritance from <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator</span></code>, 742 which is deprecated in C++17, thanks to Daniela Engert (<a href="https://github.com/boostorg/unordered/pull/7" target="_top">PR#7</a>). 743 </li> 744<li class="listitem"> 745 Stop using <code class="computeroutput"><span class="identifier">BOOST_DEDUCED_TYPENAME</span></code>. 746 </li> 747<li class="listitem"> 748 Update some Boost include paths. 749 </li> 750<li class="listitem"> 751 Rename some internal methods, and variables. 752 </li> 753<li class="listitem"> 754 Various testing improvements. 755 </li> 756<li class="listitem"> 757 Miscellaneous internal changes. 758 </li> 759</ul></div> 760</div> 761<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 762<td align="left"></td> 763<td align="right"><div class="copyright-footer">Copyright © 2003, 2004 Jeremy B. Maitin-Shepard<br>Copyright © 2005-2008 Daniel 764 James<p> 765 Distributed under the Boost Software License, Version 1.0. (See accompanying 766 file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) 767 </p> 768</div></td> 769</tr></table> 770<hr> 771<div class="spirit-nav"> 772<a accesskey="p" href="rationale.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../unordered.html"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="reference.html"><img src="../../../doc/src/images/next.png" alt="Next"></a> 773</div> 774</body> 775</html> 776