mirror of
https://github.com/boostorg/function.git
synced 2026-01-29 07:32:15 +00:00
Compare commits
24 Commits
svn-branch
...
boost-1.31
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6b6fbcb5c6 | ||
|
|
8623578cc7 | ||
|
|
50ff886c81 | ||
|
|
44e986afe3 | ||
|
|
4bb90aae7a | ||
|
|
04eb767238 | ||
|
|
8abd32bd81 | ||
|
|
3f753feb4d | ||
|
|
b09e7f3d3d | ||
|
|
2c708069e8 | ||
|
|
b8d943ec27 | ||
|
|
8c8f072d09 | ||
|
|
fad40732a9 | ||
|
|
5314836215 | ||
|
|
66cd32b565 | ||
|
|
043d0236a7 | ||
|
|
4b830024f3 | ||
|
|
40c9bb204e | ||
|
|
5347683c8e | ||
|
|
1ef5f459e2 | ||
|
|
cb3c1b0d1e | ||
|
|
1a6d95733a | ||
|
|
2c8fc1b31f | ||
|
|
fa73a61fcc |
81
doc/faq.xml
81
doc/faq.xml
@@ -5,6 +5,87 @@
|
||||
<title>Frequently Asked Questions</title>
|
||||
|
||||
<qandaset>
|
||||
<qandaentry>
|
||||
<question><para>Why can't I compare
|
||||
<classname>boost::function</classname> objects with
|
||||
<code>operator==</code> or
|
||||
<code>operator!=</code>?</para></question>
|
||||
|
||||
<answer>
|
||||
<para>Comparison between <classname>boost::function</classname>
|
||||
objects cannot be implemented "well", and therefore will not be
|
||||
implemented. The typical semantics requested for <code>f ==
|
||||
g</code> given <classname>boost::function</classname> objects
|
||||
<code>f</code> and <code>g</code> are:</para>
|
||||
<itemizedlist>
|
||||
<listitem><simpara>If <code>f</code> and <code>g</code>
|
||||
store function objects of the same type, use that type's
|
||||
<code>operator==</code> to compare
|
||||
them.</simpara></listitem>
|
||||
|
||||
<listitem><simpara>If <code>f</code> and <code>g</code>
|
||||
store function objects of different types, return
|
||||
<code>false</code>.</simpara></listitem>
|
||||
</itemizedlist>
|
||||
<para>The problem occurs when the type of the function objects
|
||||
stored by both <code>f</code> and <code>g</code> doesn't have an
|
||||
<code>operator==</code>: we would like the expression <code>f ==
|
||||
g</code> to fail to compile, as occurs with, e.g., the standard
|
||||
containers. However, this is not implementable for
|
||||
<classname>boost::function</classname> because it necessarily
|
||||
"erases" some type information after it has been assigned a
|
||||
function object, so it cannot try to call
|
||||
<code>operator==</code> later: it must either find a way to call
|
||||
<code>operator==</code> now, or it will never be able to call it
|
||||
later. Note, for instance, what happens if you try to put a
|
||||
<code>float</code> value into a
|
||||
<classname>boost::function</classname> object: you will get an
|
||||
error at the assignment operator or constructor, not in
|
||||
<code>operator()</code>, because the function-call expression
|
||||
must be bound in the constructor or assignment operator.</para>
|
||||
|
||||
<para>The most promising approach is to find a method of
|
||||
determining if <code>operator==</code> can be called for a
|
||||
particular type, and then supporting it only when it is
|
||||
available; in other situations, an exception would be
|
||||
thrown. However, to date there is no known way to detect if an
|
||||
arbitrary operator expression <code>f == g</code> is suitably
|
||||
defined. The best solution known has the following undesirable
|
||||
qualities:</para>
|
||||
|
||||
<orderedlist>
|
||||
<listitem><simpara>Fails at compile-time for objects where
|
||||
<code>operator==</code> is not accessible (e.g., because it is
|
||||
<code>private</code>).</simpara></listitem>
|
||||
|
||||
<listitem><simpara>Fails at compile-time if calling
|
||||
<code>operator==</code> is ambiguous.</simpara></listitem>
|
||||
|
||||
<listitem><simpara>Appears to be correct if the
|
||||
<code>operator==</code> declaration is correct, even though
|
||||
<code>operator==</code> may not compile.</simpara></listitem>
|
||||
</orderedlist>
|
||||
|
||||
<para>All of these problems translate into failures in the
|
||||
<classname>boost::function</classname> constructors or
|
||||
assignment operator, <emphasis>even if the user never invokes
|
||||
operator==</emphasis>. We can't do that to users.</para>
|
||||
|
||||
<para>The other option is to place the burden on users that want
|
||||
to use <code>operator==</code>, e.g., by providing an
|
||||
<code>is_equality_comparable</code> trait they may
|
||||
specialize. This is a workable solution, but is dangerous in
|
||||
practice, because forgetting to specialize the trait will result
|
||||
in unexpected exceptions being thrown from
|
||||
<classname>boost::function</classname>'s
|
||||
<code>operator==</code>. This essentially negates the usefulness
|
||||
of <code>operator==</code> in the context in which it is most
|
||||
desired: multitarget callbacks. The
|
||||
<libraryname>Signals</libraryname> library has a way around
|
||||
this.</para>
|
||||
</answer>
|
||||
</qandaentry>
|
||||
|
||||
<qandaentry>
|
||||
<question><para>I see void pointers; is this [mess] type safe?</para></question>
|
||||
<answer>
|
||||
|
||||
@@ -19,16 +19,10 @@
|
||||
</copyright>
|
||||
|
||||
<legalnotice>
|
||||
<para>Permission to copy, use, sell and distribute this software
|
||||
is granted provided this copyright notice appears in all copies.
|
||||
Permission to modify the code and to distribute modified code is
|
||||
granted provided this copyright notice appears in all copies, and
|
||||
a notice that the code was modified is included with the copyright
|
||||
notice. </para>
|
||||
|
||||
<para> This software is provided "as is" without express or
|
||||
implied warranty, and with no claim as to its suitability for any
|
||||
purpose. </para>
|
||||
<para>Use, modification and distribution is subject to the Boost
|
||||
Software License, Version 1.0. (See accompanying file
|
||||
<filename>LICENSE_1_0.txt</filename> or copy at <ulink
|
||||
url="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</ulink>)</para>
|
||||
</legalnotice>
|
||||
|
||||
<librarypurpose>Function object wrappers for deferred calls or callbacks</librarypurpose>
|
||||
|
||||
@@ -12,19 +12,16 @@
|
||||
</run-test>
|
||||
|
||||
<run-test filename="allocator_test.cpp">
|
||||
<lib>../../../libs/test/build/boost_test_exec_monitor</lib>
|
||||
<purpose><para>Test the use of custom allocators.</para></purpose>
|
||||
<if-fails><para>Allocators are ignored by the implementation.</para></if-fails>
|
||||
</run-test>
|
||||
|
||||
<run-test filename="stateless_test.cpp">
|
||||
<lib>../../../libs/test/build/boost_test_exec_monitor</lib>
|
||||
<purpose><para>Test the optimization of stateless function objects in the Boost.Function library.</para></purpose>
|
||||
<if-fails><para>The exception-safety and performance guarantees given for stateless function objects may not be met by the implementation.</para></if-fails>
|
||||
</run-test>
|
||||
|
||||
<run-test filename="lambda_test.cpp">
|
||||
<lib>../../../libs/test/build/boost_test_exec_monitor</lib>
|
||||
<purpose><para>Test the interaction between Boost.Function and Boost.Lambda.</para></purpose>
|
||||
<if-fails><para>Either Boost.Lambda does not work on the platform, or Boost.Function cannot safely be applied without the use of <functionname>boost::unlambda</functionname>.</para></if-fails>
|
||||
</run-test>
|
||||
|
||||
@@ -33,6 +33,7 @@ form to use for your compiler.
|
||||
<listitem><simpara>SGI MIPSpro 7.3.0</simpara></listitem>
|
||||
<listitem><simpara>Intel C++ 5.0, 6.0</simpara></listitem>
|
||||
<listitem><simpara>Compaq's cxx 6.2</simpara></listitem>
|
||||
<listitem><simpara>Microsoft Visual C++ 7.1</simpara></listitem>
|
||||
</itemizedlist>
|
||||
</entry>
|
||||
<entry>
|
||||
@@ -130,7 +131,7 @@ CopyConstructible, so we can even use references and arrays:
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>
|
||||
<programlisting name="function.tutorial.sum_avg_decl.portable"><classname alt="functionN">boost::function4</classname><void, int[], int, int&, float> sum_avg;</programlisting>
|
||||
<programlisting name="function.tutorial.sum_avg_decl.portable"><classname alt="functionN">boost::function4</classname><void, int*, int, int&, float&> sum_avg;</programlisting>
|
||||
</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// Boost.Function library examples
|
||||
|
||||
// Copyright (C) 2001 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2001-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
@@ -29,7 +23,7 @@ struct X {
|
||||
int
|
||||
main()
|
||||
{
|
||||
boost::function<int, int> f;
|
||||
boost::function<int (int)> f;
|
||||
X x(7);
|
||||
f = std::bind1st(std::mem_fun(&X::foo), &x);
|
||||
|
||||
|
||||
@@ -1,29 +1,23 @@
|
||||
// Boost.Function library examples
|
||||
|
||||
// Copyright (C) 2001 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2001-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
#include <iostream>
|
||||
#include <boost/function.hpp>
|
||||
|
||||
struct int_div {
|
||||
float operator()(int x, int y) const { return ((float)x)/y; };
|
||||
struct int_div {
|
||||
float operator()(int x, int y) const { return ((float)x)/y; };
|
||||
};
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
boost::function<float, int, int> f;
|
||||
boost::function<float (int, int)> f;
|
||||
f = int_div();
|
||||
|
||||
std::cout << f(5, 3) << std::endl; // 1.66667
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// Boost.Function library examples
|
||||
|
||||
// Copyright (C) 2001 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2001-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
@@ -28,8 +22,8 @@ int
|
||||
main()
|
||||
{
|
||||
// The second parameter should be int[], but some compilers (e.g., GCC)
|
||||
// complain about this
|
||||
boost::function<void, int*, int, int&, float&> sum_avg;
|
||||
// complain about this
|
||||
boost::function<void (int*, int, int&, float&)> sum_avg;
|
||||
|
||||
sum_avg = &do_sum_avg;
|
||||
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2001, 2002 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2001-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org/libs/function
|
||||
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2002-2003 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
#if !defined(BOOST_PP_IS_ITERATING)
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2003 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2002-2003 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2002-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
@@ -21,7 +15,7 @@
|
||||
# include <boost/config.hpp>
|
||||
# include <boost/function/function_base.hpp>
|
||||
# include <boost/mem_fn.hpp>
|
||||
# include <boost/type_traits/is_same.hpp>
|
||||
# include <boost/type_traits/is_integral.hpp>
|
||||
# include <boost/preprocessor/enum.hpp>
|
||||
# include <boost/preprocessor/enum_params.hpp>
|
||||
# include <boost/preprocessor/cat.hpp>
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2002-2003 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2002-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2002-2003 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2002-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2002-2003 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2002-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2002-2003 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2002-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2002-2003 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2002-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2002-2003 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2002-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2002-2003 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2002-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2002-2003 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2002-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2002-2003 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2002-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2002-2003 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2002-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2002-2003 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2002-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2001-2003 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2001-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
@@ -29,6 +23,10 @@
|
||||
#include <boost/pending/ct_if.hpp>
|
||||
#include <boost/detail/workaround.hpp>
|
||||
|
||||
#ifndef BOOST_NO_SFINAE
|
||||
# include "boost/utility/enable_if.hpp"
|
||||
#endif
|
||||
|
||||
#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300 || defined(__ICL) && __ICL <= 600 || defined(__MWERKS__) && __MWERKS__ < 0x2406 && !defined(BOOST_STRICT_CONFIG)
|
||||
# define BOOST_FUNCTION_TARGET_FIX(x) x
|
||||
#else
|
||||
@@ -44,36 +42,13 @@ namespace boost { namespace python { namespace objects {
|
||||
}}}
|
||||
#endif
|
||||
|
||||
// GCC 2.95.3 (or earlier) doesn't support enable_if
|
||||
#if BOOST_WORKAROUND(__GNUC__, < 3)
|
||||
# define BOOST_FUNCTION_NO_ENABLE_IF
|
||||
#if defined (BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
|
||||
|| defined(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG) \
|
||||
|| !(BOOST_STRICT_CONFIG || !defined(__SUNPRO_CC) || __SUNPRO_CC > 0x540)
|
||||
# define BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX
|
||||
#endif
|
||||
|
||||
// MIPSpro 7.3.1.3m doesn't support enable_if
|
||||
#if defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 730 && !defined(BOOST_STRICT_CONFIG)
|
||||
# define BOOST_FUNCTION_NO_ENABLE_IF
|
||||
#endif
|
||||
|
||||
// MSVC 7.0 doesn't support enable_if
|
||||
#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300 && !defined(BOOST_STRICT_CONFIG)
|
||||
# define BOOST_FUNCTION_NO_ENABLE_IF
|
||||
#endif
|
||||
|
||||
// Borland C++ 5.6.0 doesn't support enable_if
|
||||
#if BOOST_WORKAROUND(__BORLANDC__, <= 0x564)
|
||||
# define BOOST_FUNCTION_NO_ENABLE_IF
|
||||
#endif
|
||||
|
||||
// Metrowerks 7.2 doesn't support enable_if
|
||||
#if BOOST_WORKAROUND(__MWERKS__, <= 0x2407)
|
||||
# define BOOST_FUNCTION_NO_ENABLE_IF
|
||||
#endif
|
||||
|
||||
#if BOOST_WORKAROUND(__SUNPRO_CC, <= 0x540)
|
||||
# define BOOST_FUNCTION_NO_ENABLE_IF
|
||||
#endif
|
||||
|
||||
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
|
||||
#if !defined(BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX)
|
||||
namespace boost {
|
||||
|
||||
#if defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 730 && !defined(BOOST_STRICT_CONFIG)
|
||||
@@ -294,36 +269,6 @@ namespace boost {
|
||||
}
|
||||
};
|
||||
|
||||
#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
||||
template<bool cond, typename T> struct enable_if;
|
||||
template<typename T> struct enable_if<true, T> { typedef T type; };
|
||||
template<typename T> struct enable_if<false, T> {};
|
||||
|
||||
template<bool x>
|
||||
struct enabled
|
||||
{
|
||||
template<typename T>
|
||||
struct base
|
||||
{
|
||||
typedef T type;
|
||||
};
|
||||
};
|
||||
|
||||
template<>
|
||||
struct enabled<false>
|
||||
{
|
||||
template<typename T>
|
||||
struct base
|
||||
{
|
||||
};
|
||||
};
|
||||
|
||||
template<bool Enabled, typename T>
|
||||
struct enable_if : public enabled<Enabled>::template base<T>
|
||||
{
|
||||
};
|
||||
#endif
|
||||
|
||||
// A type that is only used for comparisons against zero
|
||||
struct useless_clear_type {};
|
||||
} // end namespace function
|
||||
@@ -372,7 +317,7 @@ public:
|
||||
void operator==(const function_base&, const function_base&);
|
||||
void operator!=(const function_base&, const function_base&);
|
||||
|
||||
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
|
||||
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
|
||||
inline bool operator==(const function_base& f,
|
||||
detail::function::useless_clear_type*)
|
||||
{
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2001-2003 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2001-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
@@ -240,9 +234,11 @@ namespace boost {
|
||||
>
|
||||
class BOOST_FUNCTION_FUNCTION : public function_base
|
||||
{
|
||||
public:
|
||||
typedef typename detail::function::function_return_type<R>::type
|
||||
internal_result_type;
|
||||
|
||||
private:
|
||||
struct clear_type {};
|
||||
|
||||
public:
|
||||
@@ -280,12 +276,12 @@ namespace boost {
|
||||
// one with a default parameter.
|
||||
template<typename Functor>
|
||||
BOOST_FUNCTION_FUNCTION(Functor BOOST_FUNCTION_TARGET_FIX(const &) f
|
||||
#ifndef BOOST_FUNCTION_NO_ENABLE_IF
|
||||
,typename detail::function::enable_if<
|
||||
#ifndef BOOST_NO_SFINAE
|
||||
,typename enable_if_c<
|
||||
(::boost::type_traits::ice_not<
|
||||
(is_same<Functor, int>::value)>::value),
|
||||
(is_integral<Functor>::value)>::value),
|
||||
int>::type = 0
|
||||
#endif // BOOST_FUNCTION_NO_ENABLE_IF
|
||||
#endif // BOOST_NO_SFINAE
|
||||
) :
|
||||
function_base(),
|
||||
invoker(0)
|
||||
@@ -293,7 +289,7 @@ namespace boost {
|
||||
this->assign_to(f);
|
||||
}
|
||||
|
||||
#ifndef BOOST_FUNCTION_NO_ENABLE_IF
|
||||
#ifndef BOOST_NO_SFINAE
|
||||
BOOST_FUNCTION_FUNCTION(clear_type*) : function_base(), invoker(0) {}
|
||||
#else
|
||||
BOOST_FUNCTION_FUNCTION(int zero) : function_base(), invoker(0)
|
||||
@@ -316,7 +312,7 @@ namespace boost {
|
||||
if (this->empty())
|
||||
boost::throw_exception(bad_function_call());
|
||||
|
||||
internal_result_type result = invoker(function_base::functor
|
||||
internal_result_type result = invoker(this->functor
|
||||
BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_ARGS);
|
||||
|
||||
@@ -333,10 +329,10 @@ namespace boost {
|
||||
// handle BOOST_FUNCTION_FUNCTION as the type of the temporary to
|
||||
// construct.
|
||||
template<typename Functor>
|
||||
#ifndef BOOST_FUNCTION_NO_ENABLE_IF
|
||||
typename detail::function::enable_if<
|
||||
#ifndef BOOST_NO_SFINAE
|
||||
typename enable_if_c<
|
||||
(::boost::type_traits::ice_not<
|
||||
(is_same<Functor, int>::value)>::value),
|
||||
(is_integral<Functor>::value)>::value),
|
||||
BOOST_FUNCTION_FUNCTION&>::type
|
||||
#else
|
||||
BOOST_FUNCTION_FUNCTION&
|
||||
@@ -347,7 +343,7 @@ namespace boost {
|
||||
return *this;
|
||||
}
|
||||
|
||||
#ifndef BOOST_FUNCTION_NO_ENABLE_IF
|
||||
#ifndef BOOST_NO_SFINAE
|
||||
BOOST_FUNCTION_FUNCTION& operator=(clear_type*)
|
||||
{
|
||||
this->clear();
|
||||
@@ -377,21 +373,20 @@ namespace boost {
|
||||
if (&other == this)
|
||||
return;
|
||||
|
||||
std::swap(function_base::manager, other.manager);
|
||||
std::swap(function_base::functor, other.functor);
|
||||
std::swap(this->manager, other.manager);
|
||||
std::swap(this->functor, other.functor);
|
||||
std::swap(invoker, other.invoker);
|
||||
}
|
||||
|
||||
// Clear out a target, if there is one
|
||||
void clear()
|
||||
{
|
||||
if (function_base::manager) {
|
||||
if (this->manager) {
|
||||
function_base::functor =
|
||||
function_base::manager(function_base::functor,
|
||||
detail::function::destroy_functor_tag);
|
||||
this->manager(this->functor, detail::function::destroy_functor_tag);
|
||||
}
|
||||
|
||||
function_base::manager = 0;
|
||||
this->manager = 0;
|
||||
invoker = 0;
|
||||
}
|
||||
|
||||
@@ -419,8 +414,8 @@ namespace boost {
|
||||
{
|
||||
if (!f.empty()) {
|
||||
invoker = f.invoker;
|
||||
function_base::manager = f.manager;
|
||||
function_base::functor =
|
||||
this->manager = f.manager;
|
||||
this->functor =
|
||||
f.manager(f.functor, detail::function::clone_functor_tag);
|
||||
}
|
||||
}
|
||||
@@ -446,10 +441,10 @@ namespace boost {
|
||||
invoker_type;
|
||||
|
||||
invoker = &invoker_type::invoke;
|
||||
function_base::manager =
|
||||
this->manager =
|
||||
&detail::function::functor_manager<FunctionPtr, Allocator>::manage;
|
||||
function_base::functor =
|
||||
function_base::manager(detail::function::make_any_pointer(
|
||||
this->functor =
|
||||
this->manager(detail::function::make_any_pointer(
|
||||
// should be a reinterpret cast, but some compilers
|
||||
// insist on giving cv-qualifiers to free functions
|
||||
(void (*)())(f)
|
||||
@@ -479,7 +474,7 @@ namespace boost {
|
||||
invoker_type;
|
||||
|
||||
invoker = &invoker_type::invoke;
|
||||
function_base::manager = &detail::function::functor_manager<
|
||||
this->manager = &detail::function::functor_manager<
|
||||
FunctionObj, Allocator>::manage;
|
||||
#ifndef BOOST_NO_STD_ALLOCATOR
|
||||
typedef typename Allocator::template rebind<FunctionObj>::other
|
||||
@@ -494,7 +489,7 @@ namespace boost {
|
||||
#else
|
||||
FunctionObj* new_f = new FunctionObj(f);
|
||||
#endif // BOOST_NO_STD_ALLOCATOR
|
||||
function_base::functor =
|
||||
this->functor =
|
||||
detail::function::make_any_pointer(static_cast<void*>(new_f));
|
||||
}
|
||||
}
|
||||
@@ -513,9 +508,9 @@ namespace boost {
|
||||
invoker_type;
|
||||
|
||||
invoker = &invoker_type::invoke;
|
||||
function_base::manager = &detail::function::trivial_manager;
|
||||
function_base::functor =
|
||||
function_base::manager(
|
||||
this->manager = &detail::function::trivial_manager;
|
||||
this->functor =
|
||||
this->manager(
|
||||
detail::function::make_any_pointer(
|
||||
const_cast<FunctionObj*>(f.get_pointer())),
|
||||
detail::function::clone_functor_tag);
|
||||
@@ -534,8 +529,8 @@ namespace boost {
|
||||
>::type
|
||||
invoker_type;
|
||||
invoker = &invoker_type::invoke;
|
||||
function_base::manager = &detail::function::trivial_manager;
|
||||
function_base::functor = detail::function::make_any_pointer(this);
|
||||
this->manager = &detail::function::trivial_manager;
|
||||
this->functor = detail::function::make_any_pointer(this);
|
||||
}
|
||||
|
||||
typedef internal_result_type (*invoker_type)(detail::function::any_pointer
|
||||
@@ -561,9 +556,7 @@ namespace boost {
|
||||
f1.swap(f2);
|
||||
}
|
||||
|
||||
#if !defined (BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
|
||||
&& !defined(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG) \
|
||||
&& (BOOST_STRICT_CONFIG || !defined(__SUNPRO_CC) || __SUNPRO_CC > 0x540)
|
||||
#if !defined(BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX)
|
||||
|
||||
#if BOOST_FUNCTION_NUM_ARGS == 0
|
||||
#define BOOST_FUNCTION_PARTIAL_SPEC R (void)
|
||||
@@ -591,10 +584,10 @@ public:
|
||||
|
||||
template<typename Functor>
|
||||
function(Functor f
|
||||
#ifndef BOOST_FUNCTION_NO_ENABLE_IF
|
||||
,typename detail::function::enable_if<
|
||||
#ifndef BOOST_NO_SFINAE
|
||||
,typename enable_if_c<
|
||||
(::boost::type_traits::ice_not<
|
||||
(is_same<Functor, int>::value)>::value),
|
||||
(is_integral<Functor>::value)>::value),
|
||||
int>::type = 0
|
||||
#endif
|
||||
) :
|
||||
@@ -602,7 +595,7 @@ public:
|
||||
{
|
||||
}
|
||||
|
||||
#ifndef BOOST_FUNCTION_NO_ENABLE_IF
|
||||
#ifndef BOOST_NO_SFINAE
|
||||
function(clear_type*) : base_type() {}
|
||||
#endif
|
||||
|
||||
@@ -617,10 +610,10 @@ public:
|
||||
}
|
||||
|
||||
template<typename Functor>
|
||||
#ifndef BOOST_FUNCTION_NO_ENABLE_IF
|
||||
typename detail::function::enable_if<
|
||||
#ifndef BOOST_NO_SFINAE
|
||||
typename enable_if_c<
|
||||
(::boost::type_traits::ice_not<
|
||||
(is_same<Functor, int>::value)>::value),
|
||||
(is_integral<Functor>::value)>::value),
|
||||
self_type&>::type
|
||||
#else
|
||||
self_type&
|
||||
@@ -631,7 +624,7 @@ public:
|
||||
return *this;
|
||||
}
|
||||
|
||||
#ifndef BOOST_FUNCTION_NO_ENABLE_IF
|
||||
#ifndef BOOST_NO_SFINAE
|
||||
self_type& operator=(clear_type*)
|
||||
{
|
||||
this->clear();
|
||||
|
||||
@@ -2,16 +2,10 @@
|
||||
#
|
||||
# Boost.Function library
|
||||
#
|
||||
# Copyright (C) 2001-2003 Doug Gregor (gregod@cs.rpi.edu)
|
||||
#
|
||||
# Permission to copy, use, sell and distribute this software is granted
|
||||
# provided this copyright notice appears in all copies.
|
||||
# Permission to modify the code and to distribute modified code is granted
|
||||
# provided this copyright notice appears in all copies, and a notice
|
||||
# that the code was modified is included with the copyright notice.
|
||||
#
|
||||
# This software is provided "as is" without express or implied warranty,
|
||||
# and with no claim as to its suitability for any purpose.
|
||||
# Copyright Doug Gregor 2001-2003. Use, modification and
|
||||
# distribution is subject to 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)
|
||||
#
|
||||
# For more information, see http://www.boost.org
|
||||
use English;
|
||||
|
||||
16
test/Jamfile
16
test/Jamfile
@@ -2,13 +2,9 @@
|
||||
|
||||
# Copyright (C) 2001-2003 Douglas Gregor
|
||||
|
||||
# Permission to copy, use, sell and distribute this software is granted
|
||||
# provided this copyright notice appears in all copies. Permission to modify
|
||||
# the code and to distribute modified code is granted provided this copyright
|
||||
# notice appears in all copies, and a notice that the code was modified is
|
||||
# included with the copyright notice. This software is provided "as is"
|
||||
# without express or implied warranty, and with no claim as to its suitability
|
||||
# for any purpose.
|
||||
# Use, modification and distribution is subject to 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)
|
||||
|
||||
# For more information, see http://www.boost.org/
|
||||
|
||||
@@ -33,11 +29,11 @@ DEPENDS all : test ;
|
||||
|
||||
[ run libs/function/test/function_n_test.cpp : : : : ]
|
||||
|
||||
[ run libs/function/test/allocator_test.cpp <lib>../../../libs/test/build/boost_test_exec_monitor : : : : ]
|
||||
[ run libs/function/test/allocator_test.cpp : : : : ]
|
||||
|
||||
[ run libs/function/test/stateless_test.cpp <lib>../../../libs/test/build/boost_test_exec_monitor : : : : ]
|
||||
[ run libs/function/test/stateless_test.cpp : : : : ]
|
||||
|
||||
[ run libs/function/test/lambda_test.cpp <lib>../../../libs/test/build/boost_test_exec_monitor : : : : ]
|
||||
[ run libs/function/test/lambda_test.cpp : : : : ]
|
||||
|
||||
[ compile-fail libs/function/test/function_test_fail1.cpp : : : : ]
|
||||
|
||||
|
||||
58
test/Jamfile.v2
Normal file
58
test/Jamfile.v2
Normal file
@@ -0,0 +1,58 @@
|
||||
# Function library
|
||||
|
||||
# Copyright Doug Gregor 2001-2003. Use, modification and
|
||||
# distribution is subject to 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)
|
||||
|
||||
# For more information, see http://www.boost.org/
|
||||
|
||||
project
|
||||
: source-location $(BOOST_ROOT)
|
||||
;
|
||||
|
||||
# bring in rules for testing
|
||||
import testing ;
|
||||
|
||||
{
|
||||
|
||||
test-suite function
|
||||
:
|
||||
[ run libs/function/test/function_test.cpp : : : : lib_function_test ]
|
||||
|
||||
[ run libs/function/test/function_n_test.cpp : : : : ]
|
||||
|
||||
[ run libs/function/test/allocator_test.cpp ../../../libs/test/build//boost_test_exec_monitor : : : : ]
|
||||
|
||||
[ run libs/function/test/stateless_test.cpp ../../../libs/test/build//boost_test_exec_monitor : : : : ]
|
||||
|
||||
[ run libs/function/test/lambda_test.cpp ../../../libs/test/build//boost_test_exec_monitor : : : : ]
|
||||
|
||||
[ compile-fail libs/function/test/function_test_fail1.cpp : : : : ]
|
||||
|
||||
[ compile-fail libs/function/test/function_test_fail2.cpp : : : : ]
|
||||
|
||||
[ compile libs/function/test/function_30.cpp : : : : ]
|
||||
|
||||
[ run libs/function/test/function_arith_cxx98.cpp : : : : ]
|
||||
|
||||
[ run libs/function/test/function_arith_portable.cpp : : : : ]
|
||||
|
||||
[ run libs/function/test/sum_avg_cxx98.cpp : : : : ]
|
||||
|
||||
[ run libs/function/test/sum_avg_portable.cpp : : : : ]
|
||||
|
||||
[ run libs/function/test/mem_fun_cxx98.cpp : : : : ]
|
||||
|
||||
[ run libs/function/test/mem_fun_portable.cpp : : : : ]
|
||||
|
||||
[ run libs/function/test/std_bind_cxx98.cpp : : : : ]
|
||||
|
||||
[ run libs/function/test/std_bind_portable.cpp : : : : ]
|
||||
|
||||
[ run libs/function/test/function_ref_cxx98.cpp : : : : ]
|
||||
|
||||
[ run libs/function/test/function_ref_portable.cpp : : : : ]
|
||||
;
|
||||
}
|
||||
|
||||
@@ -1,20 +1,13 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2001 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2001-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
#define BOOST_INCLUDE_MAIN
|
||||
#include <boost/test/test_tools.hpp>
|
||||
#include <boost/test/minimal.hpp>
|
||||
#include <cassert>
|
||||
#include <functional>
|
||||
#include <boost/function.hpp>
|
||||
@@ -34,7 +27,7 @@ struct counting_allocator : public std::allocator<T>
|
||||
typedef counting_allocator<U> other;
|
||||
};
|
||||
|
||||
|
||||
|
||||
T* allocate(std::size_t n)
|
||||
{
|
||||
alloc_count++;
|
||||
@@ -60,7 +53,7 @@ static void do_nothing() {}
|
||||
int
|
||||
test_main(int, char*[])
|
||||
{
|
||||
function2<int, int, int, counting_allocator<int> > f;
|
||||
function2<int, int, int, counting_allocator<int> > f;
|
||||
f = plus<int>();
|
||||
f.clear();
|
||||
BOOST_TEST(alloc_count == 1);
|
||||
@@ -78,7 +71,7 @@ test_main(int, char*[])
|
||||
fv.clear();
|
||||
BOOST_TEST(alloc_count == 1);
|
||||
BOOST_TEST(dealloc_count == 1);
|
||||
|
||||
|
||||
alloc_count = 0;
|
||||
dealloc_count = 0;
|
||||
fv = &do_nothing;
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2002-2003 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2002-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
|
||||
@@ -2,13 +2,9 @@
|
||||
|
||||
// Copyright (C) 2001-2003 Douglas Gregor
|
||||
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies. Permission to modify
|
||||
// the code and to distribute modified code is granted provided this copyright
|
||||
// notice appears in all copies, and a notice that the code was modified is
|
||||
// included with the copyright notice. This software is provided "as is"
|
||||
// without express or implied warranty, and with no claim as to its
|
||||
// suitability for any purpose.
|
||||
// Use, modification and distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org/
|
||||
|
||||
|
||||
@@ -2,13 +2,9 @@
|
||||
|
||||
// Copyright (C) 2001-2003 Douglas Gregor
|
||||
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies. Permission to modify
|
||||
// the code and to distribute modified code is granted provided this copyright
|
||||
// notice appears in all copies, and a notice that the code was modified is
|
||||
// included with the copyright notice. This software is provided "as is"
|
||||
// without express or implied warranty, and with no claim as to its
|
||||
// suitability for any purpose.
|
||||
// Use, modification and distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org/
|
||||
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2001, 2002 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2001-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
@@ -57,8 +51,8 @@ test_zero_args()
|
||||
{
|
||||
typedef function0<void> func_void_type;
|
||||
|
||||
write_five_obj five;
|
||||
write_three_obj three;
|
||||
write_five_obj five = write_five_obj(); // Initialization for Borland C++ 5.5
|
||||
write_three_obj three = write_three_obj(); // Ditto
|
||||
|
||||
// Default construction
|
||||
func_void_type v1;
|
||||
@@ -478,7 +472,8 @@ test_zero_args()
|
||||
BOOST_TEST(global_int == 5);
|
||||
|
||||
// Const vs. non-const
|
||||
write_const_1_nonconst_2 one_or_two;
|
||||
// Initialization for Borland C++ 5.5
|
||||
write_const_1_nonconst_2 one_or_two = write_const_1_nonconst_2();
|
||||
const function0<void> v7(one_or_two);
|
||||
function0<void> v8(one_or_two);
|
||||
|
||||
@@ -501,9 +496,9 @@ test_zero_args()
|
||||
|
||||
// Test return values
|
||||
typedef function0<int> func_int_type;
|
||||
generate_five_obj gen_five;
|
||||
generate_three_obj gen_three;
|
||||
|
||||
// Initialization for Borland C++ 5.5
|
||||
generate_five_obj gen_five = generate_five_obj();
|
||||
generate_three_obj gen_three = generate_three_obj();
|
||||
func_int_type i0(gen_five);
|
||||
|
||||
BOOST_TEST(i0() == 5);
|
||||
@@ -536,7 +531,7 @@ test_zero_args()
|
||||
static void
|
||||
test_one_arg()
|
||||
{
|
||||
negate<int> neg;
|
||||
negate<int> neg = negate<int>(); // Initialization for Borland C++ 5.5
|
||||
|
||||
function1<int, int> f1(neg);
|
||||
BOOST_TEST(f1(5) == -5);
|
||||
|
||||
@@ -2,13 +2,9 @@
|
||||
|
||||
// Copyright (C) 2001-2003 Douglas Gregor
|
||||
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies. Permission to modify
|
||||
// the code and to distribute modified code is granted provided this copyright
|
||||
// notice appears in all copies, and a notice that the code was modified is
|
||||
// included with the copyright notice. This software is provided "as is"
|
||||
// without express or implied warranty, and with no claim as to its
|
||||
// suitability for any purpose.
|
||||
// Use, modification and distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org/
|
||||
|
||||
|
||||
@@ -2,13 +2,9 @@
|
||||
|
||||
// Copyright (C) 2001-2003 Douglas Gregor
|
||||
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies. Permission to modify
|
||||
// the code and to distribute modified code is granted provided this copyright
|
||||
// notice appears in all copies, and a notice that the code was modified is
|
||||
// included with the copyright notice. This software is provided "as is"
|
||||
// without express or implied warranty, and with no claim as to its
|
||||
// suitability for any purpose.
|
||||
// Use, modification and distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org/
|
||||
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2001, 2002 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2001-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
|
||||
@@ -1,20 +1,13 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2001 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2001-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
#define BOOST_INCLUDE_MAIN
|
||||
#include <boost/test/test_tools.hpp>
|
||||
#include <boost/test/minimal.hpp>
|
||||
#include <boost/function.hpp>
|
||||
|
||||
using namespace std;
|
||||
|
||||
@@ -1,20 +1,13 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2001 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2001-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
#define BOOST_INCLUDE_MAIN
|
||||
#include <boost/test/test_tools.hpp>
|
||||
#include <boost/test/minimal.hpp>
|
||||
#include <boost/function.hpp>
|
||||
|
||||
using namespace std;
|
||||
|
||||
@@ -1,22 +1,16 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2002-2003 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2002-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
#include <iostream>
|
||||
#include <cstdlib>
|
||||
|
||||
#include <boost/test/test_tools.hpp>
|
||||
#include <boost/test/minimal.hpp>
|
||||
#include <boost/lambda/lambda.hpp>
|
||||
#include <boost/lambda/bind.hpp>
|
||||
#include <boost/function.hpp>
|
||||
|
||||
@@ -2,13 +2,9 @@
|
||||
|
||||
// Copyright (C) 2001-2003 Douglas Gregor
|
||||
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies. Permission to modify
|
||||
// the code and to distribute modified code is granted provided this copyright
|
||||
// notice appears in all copies, and a notice that the code was modified is
|
||||
// included with the copyright notice. This software is provided "as is"
|
||||
// without express or implied warranty, and with no claim as to its
|
||||
// suitability for any purpose.
|
||||
// Use, modification and distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org/
|
||||
|
||||
|
||||
@@ -2,13 +2,9 @@
|
||||
|
||||
// Copyright (C) 2001-2003 Douglas Gregor
|
||||
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies. Permission to modify
|
||||
// the code and to distribute modified code is granted provided this copyright
|
||||
// notice appears in all copies, and a notice that the code was modified is
|
||||
// included with the copyright notice. This software is provided "as is"
|
||||
// without express or implied warranty, and with no claim as to its
|
||||
// suitability for any purpose.
|
||||
// Use, modification and distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org/
|
||||
|
||||
|
||||
@@ -1,20 +1,13 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2001 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
// Copyright Doug Gregor 2001-2003. Use, modification and
|
||||
// distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
#define BOOST_INCLUDE_MAIN
|
||||
#include <boost/test/test_tools.hpp>
|
||||
#include <boost/test/minimal.hpp>
|
||||
#include <boost/function.hpp>
|
||||
#include <stdexcept>
|
||||
|
||||
@@ -24,7 +17,6 @@ struct stateless_integer_add {
|
||||
void* operator new(std::size_t, stateless_integer_add*)
|
||||
{
|
||||
throw std::runtime_error("Cannot allocate a stateless_integer_add");
|
||||
return 0; // suppress warnings
|
||||
}
|
||||
|
||||
void operator delete(void*, stateless_integer_add*) throw()
|
||||
|
||||
@@ -2,13 +2,9 @@
|
||||
|
||||
// Copyright (C) 2001-2003 Douglas Gregor
|
||||
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies. Permission to modify
|
||||
// the code and to distribute modified code is granted provided this copyright
|
||||
// notice appears in all copies, and a notice that the code was modified is
|
||||
// included with the copyright notice. This software is provided "as is"
|
||||
// without express or implied warranty, and with no claim as to its
|
||||
// suitability for any purpose.
|
||||
// Use, modification and distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org/
|
||||
|
||||
|
||||
@@ -2,13 +2,9 @@
|
||||
|
||||
// Copyright (C) 2001-2003 Douglas Gregor
|
||||
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies. Permission to modify
|
||||
// the code and to distribute modified code is granted provided this copyright
|
||||
// notice appears in all copies, and a notice that the code was modified is
|
||||
// included with the copyright notice. This software is provided "as is"
|
||||
// without express or implied warranty, and with no claim as to its
|
||||
// suitability for any purpose.
|
||||
// Use, modification and distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org/
|
||||
|
||||
|
||||
@@ -2,13 +2,9 @@
|
||||
|
||||
// Copyright (C) 2001-2003 Douglas Gregor
|
||||
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies. Permission to modify
|
||||
// the code and to distribute modified code is granted provided this copyright
|
||||
// notice appears in all copies, and a notice that the code was modified is
|
||||
// included with the copyright notice. This software is provided "as is"
|
||||
// without express or implied warranty, and with no claim as to its
|
||||
// suitability for any purpose.
|
||||
// Use, modification and distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org/
|
||||
|
||||
|
||||
@@ -2,13 +2,9 @@
|
||||
|
||||
// Copyright (C) 2001-2003 Douglas Gregor
|
||||
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies. Permission to modify
|
||||
// the code and to distribute modified code is granted provided this copyright
|
||||
// notice appears in all copies, and a notice that the code was modified is
|
||||
// included with the copyright notice. This software is provided "as is"
|
||||
// without express or implied warranty, and with no claim as to its
|
||||
// suitability for any purpose.
|
||||
// Use, modification and distribution is subject to 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)
|
||||
|
||||
// For more information, see http://www.boost.org/
|
||||
|
||||
@@ -25,7 +21,7 @@ void do_sum_avg(int values[], int n, int& sum, float& avg)
|
||||
}
|
||||
int main()
|
||||
{
|
||||
boost::function4<void, int[], int, int&, float> sum_avg;
|
||||
boost::function4<void, int*, int, int&, float&> sum_avg;
|
||||
sum_avg = &do_sum_avg;
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user