<?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 &amp; 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 &lt;boost/function/function_typeof.hpp&gt; that provides support for using the Boost.Typeof library on Boost.Function objects.</para></listitem>

      <listitem><para>Added a new header &lt;boost/function/function_fwd.hpp&gt; 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(&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>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&lt;int, float,
  double, std::string&gt;</computeroutput>, has been changed to a more natural
  syntax <computeroutput>boost::function&lt;int (float, double,
  std::string)&gt;</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&lt;void, int, int&gt;</computeroutput>
  to <computeroutput>boost::function2&lt;void, int, int&gt;</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>
