• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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">&lt;</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">&gt;</span></code>
103          and <code class="computeroutput"><span class="special">&lt;</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">&gt;</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">&amp;&amp;)</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