| <?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: 2013-06-15 00:06:26 -0700 (Sat, 15 Jun 2013) $"> |
| <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> |