9245ac2a8f
* Update documentation of Boost.Function and add info about rvalues (fixes #8505) [SVN r84788]
147 lines
7.3 KiB
XML
147 lines
7.3 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!--
|
|
Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
|
|
|
|
Distributed under the Boost Software License, Version 1.0.
|
|
(See accompanying file LICENSE_1_0.txt or copy at
|
|
http://www.boost.org/LICENSE_1_0.txt)
|
|
-->
|
|
<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN"
|
|
"http://www.boost.org/tools/boostbook/dtd/boostbook.dtd">
|
|
<section id="function.history" last-revision="$Date$">
|
|
<title>History & Compatibility Notes</title>
|
|
|
|
<itemizedlist spacing="compact">
|
|
|
|
<listitem><para><bold>Version 1.52.0</bold>: </para>
|
|
<itemizedlist spacing="compact">
|
|
<listitem><para>Move constructors and move assignment
|
|
operators added (only for compilers with C++11 rvalue
|
|
references support). Original patch
|
|
contributed by Antony Polukhin.</para></listitem>
|
|
</itemizedlist>
|
|
</listitem>
|
|
|
|
<listitem><para><bold>Version 1.37.0</bold>: </para>
|
|
<itemizedlist spacing="compact">
|
|
<listitem><para>Improved the performance of Boost.Function's
|
|
swap() operation for large function objects. Original patch
|
|
contributed by Niels Dekker.</para></listitem>
|
|
|
|
<listitem><para>Added a new header <boost/function/function_typeof.hpp> that provides support for using the Boost.Typeof library on Boost.Function objects.</para></listitem>
|
|
|
|
<listitem><para>Added a new header <boost/function/function_fwd.hpp> that provides support for using the Boost.Typeof library on Boost.Function objects.</para></listitem>
|
|
|
|
<listitem><para>The <methodname alt="boost::function::target">target</methodname>()
|
|
function now respects the cv-qualifiers of function objects
|
|
stored by reference
|
|
(using <classname>boost::reference_wrapper</classname>), such
|
|
that a reference to a <code>const</code> function object cannot
|
|
be accessed as a reference to a non-<code>const</code> function
|
|
object.</para></listitem>
|
|
</itemizedlist>
|
|
</listitem>
|
|
|
|
<listitem><para><bold>Version 1.36.0</bold>: </para>
|
|
<itemizedlist spacing="compact">
|
|
<listitem><para>Boost.Function now implements allocator support
|
|
in the same way that is is provided in C++0x, based on C++
|
|
committee
|
|
proposal <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2308.html">N2308</ulink>. This
|
|
change removes the <computeroutput>Allocator</computeroutput>
|
|
template parameter of <classname>boost::function</classname> 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.</para></listitem>
|
|
</itemizedlist>
|
|
</listitem>
|
|
|
|
<listitem><para><bold>Version 1.34.0</bold>: </para>
|
|
<itemizedlist spacing="compact">
|
|
<listitem><para>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>bind(&X:foo, &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>swap()</code> may throw.</para></listitem>
|
|
</itemizedlist>
|
|
</listitem>
|
|
|
|
<listitem><para><bold>Version 1.30.0</bold>: </para>
|
|
<itemizedlist spacing="compact">
|
|
<listitem><para>All features deprecated in version 1.29.0 have
|
|
been removed from Boost.Function.</para></listitem>
|
|
|
|
<listitem><para><code><classname>boost::function</classname></code>
|
|
and <code><classname>boost::functionN</classname></code> objects
|
|
can be assigned to 0 (semantically equivalent to calling
|
|
<code><methodname
|
|
alt="boost::function::clear">clear</methodname>()</code>) and
|
|
compared against 0 (semantically equivalent to calling
|
|
<code><methodname
|
|
alt="boost::function::empty">empty</methodname>()</code>).</para></listitem>
|
|
|
|
<listitem><para>The Boost.Function code is now generated
|
|
entirely by the <libraryname>Preprocessor</libraryname> library,
|
|
so it is now possible to generate
|
|
<code><classname>boost::function</classname></code> and
|
|
<code><classname>boost::functionN</classname></code> class
|
|
templates for any number of arguments.</para></listitem>
|
|
|
|
<listitem><para>The
|
|
<classname>boost::bad_function_call</classname> exception class
|
|
was introduced.</para></listitem>
|
|
</itemizedlist>
|
|
</listitem>
|
|
|
|
<listitem><para><bold>Version 1.29.0</bold>:
|
|
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:
|
|
|
|
<itemizedlist spacing="compact">
|
|
<listitem><para>The <computeroutput>boost::function</computeroutput> class template syntax has
|
|
changed. The old syntax, e.g., <computeroutput>boost::function<int, float,
|
|
double, std::string></computeroutput>, has been changed to a more natural
|
|
syntax <computeroutput>boost::function<int (float, double,
|
|
std::string)></computeroutput>, where all return and argument types are
|
|
encoded in a single function type parameter. Any other template
|
|
parameters (e.g., the <computeroutput>Allocator</computeroutput>) follow this single
|
|
parameter.</para>
|
|
|
|
<para> 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
|
|
<computeroutput>functionN</computeroutput> 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 <computeroutput>boost::function<void, int, int></computeroutput>
|
|
to <computeroutput>boost::function2<void, int, int></computeroutput> (adding the number of
|
|
function arguments to the end of the class name).</para>
|
|
|
|
<para> Support for the old syntax with the
|
|
<computeroutput>boost::function</computeroutput> class template will persist for a short
|
|
while, but will eventually be removed so that we can provide better
|
|
error messages and link compatibility. </para></listitem>
|
|
|
|
<listitem><para>The invocation
|
|
policy template parameter (<computeroutput>Policy</computeroutput>) has been deprecated
|
|
and will be removed. There is no direct equivalent to this rarely
|
|
used feature.</para></listitem>
|
|
|
|
<listitem><para>The mixin template parameter
|
|
(<computeroutput>Mixin</computeroutput>) has been deprecated and will be removed. There
|
|
is not direct equivalent to this rarely used feature.</para></listitem>
|
|
|
|
<listitem><para>The
|
|
<computeroutput>set</computeroutput> methods have been deprecated and will be
|
|
removed. Use the assignment operator instead.</para></listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</section>
|