123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- <?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>
|