<?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: 2008-10-16 09:21:50 -0400 (Thu, 16 Oct 2008) $">
  <title>History &amp; Compatibility Notes</title>

<itemizedlist spacing="compact">

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