blob: 14324f0b571c38e2be0aaa55d40a826ccf9979f2 [file] [log] [blame]
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>History &amp; Compatibility Notes</title>
<link rel="stylesheet" href="../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
<link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset">
<link rel="up" href="../function.html" title="Chapter&#160;7.&#160;Boost.Function">
<link rel="prev" href="../function.html" title="Chapter&#160;7.&#160;Boost.Function">
<link rel="next" href="tutorial.html" title="Tutorial">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
<td align="center"><a href="../../../index.html">Home</a></td>
<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
<td align="center"><a href="../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../function.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../function.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="tutorial.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="function.history"></a>History &amp; Compatibility Notes</h2></div></div></div>
<div class="itemizedlist"><ul class="itemizedlist" type="disc" compact>
<li class="listitem">
<p><span class="bold"><strong>Version 1.37.0</strong></span>: </p>
<div class="itemizedlist"><ul class="itemizedlist" type="circle" compact>
<li class="listitem"><p>Improved the performance of Boost.Function's
swap() operation for large function objects. Original patch
contributed by Niels Dekker.</p></li>
<li class="listitem"><p>Added a new header &lt;boost/function/function_typeof.hpp&gt; that provides support for using the Boost.Typeof library on Boost.Function objects.</p></li>
<li class="listitem"><p>Added a new header &lt;boost/function/function_fwd.hpp&gt; that provides support for using the Boost.Typeof library on Boost.Function objects.</p></li>
<li class="listitem"><p>The <code class="computeroutput"><a class="link" href="../boost/function.html#id462607-bb">target</a></code>()
function now respects the cv-qualifiers of function objects
stored by reference
(using <code class="computeroutput"><a class="link" href="../boost/reference_wrapper.html" title="Class template reference_wrapper">boost::reference_wrapper</a></code>), such
that a reference to a <code class="computeroutput">const</code> function object cannot
be accessed as a reference to a non-<code class="computeroutput">const</code> function
object.</p></li>
</ul></div>
</li>
<li class="listitem">
<p><span class="bold"><strong>Version 1.36.0</strong></span>: </p>
<div class="itemizedlist"><ul class="itemizedlist" type="circle" compact><li class="listitem"><p>Boost.Function now implements allocator support
in the same way that is is provided in C++0x, based on C++
committee
proposal <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2308.html" target="_top">N2308</a>. This
change removes the <code class="computeroutput">Allocator</code>
template parameter of <code class="computeroutput"><a class="link" href="../boost/function.html" title="Class template function">boost::function</a></code> in
favor of a constructor that takes an argument. While this is a
backward-incompatible change, it is likely to affect only a few
users. This change to Function was contributed by Emil
Dotchevski, which also authored the corresponding C++ committee
proposal.</p></li></ul></div>
</li>
<li class="listitem">
<p><span class="bold"><strong>Version 1.34.0</strong></span>: </p>
<div class="itemizedlist"><ul class="itemizedlist" type="circle" compact><li class="listitem"><p>Boost.Function now implements a small buffer optimization, which can drastically improve the performance when copying or construction Boost.Function objects storing small function objects. For instance, <code class="computeroutput">bind(&amp;X:foo, &amp;x, _1, _2)</code> requires no heap allocation when placed into a Boost.Function object. Note that some exception-safety guarantees have changed: assignment provides the basic exception guarantee and <code class="computeroutput">swap()</code> may throw.</p></li></ul></div>
</li>
<li class="listitem">
<p><span class="bold"><strong>Version 1.30.0</strong></span>: </p>
<div class="itemizedlist"><ul class="itemizedlist" type="circle" compact>
<li class="listitem"><p>All features deprecated in version 1.29.0 have
been removed from Boost.Function.</p></li>
<li class="listitem"><p><code class="computeroutput"><a class="link" href="../boost/function.html" title="Class template function">boost::function</a></code>
and <code class="computeroutput"><a class="link" href="../boost/functionN.html" title="Class template functionN">boost::functionN</a></code> objects
can be assigned to 0 (semantically equivalent to calling
<code class="computeroutput"><a class="link" href="../boost/function.html#id375935-bb">clear</a>()</code>) and
compared against 0 (semantically equivalent to calling
<code class="computeroutput"><a class="link" href="../boost/function.html#id344924-bb">empty</a>()</code>).</p></li>
<li class="listitem"><p>The Boost.Function code is now generated
entirely by the <a href="../../../libs/preprocessor/index.html" target="_top">Preprocessor</a> library,
so it is now possible to generate
<code class="computeroutput"><a class="link" href="../boost/function.html" title="Class template function">boost::function</a></code> and
<code class="computeroutput"><a class="link" href="../boost/functionN.html" title="Class template functionN">boost::functionN</a></code> class
templates for any number of arguments.</p></li>
<li class="listitem"><p>The
<code class="computeroutput"><a class="link" href="../boost/bad_function_call.html" title="Class bad_function_call">boost::bad_function_call</a></code> exception class
was introduced.</p></li>
</ul></div>
</li>
<li class="listitem">
<p><span class="bold"><strong>Version 1.29.0</strong></span>:
Boost.Function has been partially redesigned to minimize the
interface and make it cleaner. Several seldom- or never-used
features of the older Boost.Function have been deprecated and will
be removed in the near future. Here is a list of features that have
been deprecated, the likely impact of the deprecations, and how to
adjust your code:
</p>
<div class="itemizedlist"><ul class="itemizedlist" type="circle" compact>
<li class="listitem">
<p>The <code class="computeroutput">boost::function</code> class template syntax has
changed. The old syntax, e.g., <code class="computeroutput">boost::function&lt;int, float,
double, std::string&gt;</code>, has been changed to a more natural
syntax <code class="computeroutput">boost::function&lt;int (float, double,
std::string)&gt;</code>, where all return and argument types are
encoded in a single function type parameter. Any other template
parameters (e.g., the <code class="computeroutput">Allocator</code>) follow this single
parameter.</p>
<p> The resolution to this change depends on the
abilities of your compiler: if your compiler supports template
partial specialization and can parse function types (most do), modify
your code to use the newer
syntax (preferable) or directly use one of the
<code class="computeroutput">functionN</code> classes whose syntax has not
changed. If your compiler does not support template partial
specialization or function types, you must take the latter option and
use the numbered Boost.Function classes. This option merely requires
changing types such as <code class="computeroutput">boost::function&lt;void, int, int&gt;</code>
to <code class="computeroutput">boost::function2&lt;void, int, int&gt;</code> (adding the number of
function arguments to the end of the class name).</p>
<p> Support for the old syntax with the
<code class="computeroutput">boost::function</code> class template will persist for a short
while, but will eventually be removed so that we can provide better
error messages and link compatibility. </p>
</li>
<li class="listitem"><p>The invocation
policy template parameter (<code class="computeroutput">Policy</code>) has been deprecated
and will be removed. There is no direct equivalent to this rarely
used feature.</p></li>
<li class="listitem"><p>The mixin template parameter
(<code class="computeroutput">Mixin</code>) has been deprecated and will be removed. There
is not direct equivalent to this rarely used feature.</p></li>
<li class="listitem"><p>The
<code class="computeroutput">set</code> methods have been deprecated and will be
removed. Use the assignment operator instead.</p></li>
</ul></div>
<p>
</p>
</li>
</ul></div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"><p><small>Last revised: October 16, 2008 at 14:21:50 +0100</small></p></td>
<td align="right"><div class="copyright-footer">Copyright &#169; 2001-2004 Douglas Gregor<p>Use, modification and distribution is subject to the Boost
Software License, Version 1.0. (See accompanying file
<code class="filename">LICENSE_1_0.txt</code> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../function.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../function.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="tutorial.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>