diff --git a/doc/history.xml b/doc/history.xml
index c79b11a..a7f89df 100644
--- a/doc/history.xml
+++ b/doc/history.xml
@@ -18,6 +18,10 @@
Improved the performance of Boost.Function's
swap() operation for large function objects. Original patch
contributed by Niels Dekker.
+
+ Added a new header <boost/function/function_typeof.hpp> that provides support for using the Boost.Typeof library on Boost.Function objects.
+
+ Added a new header <boost/function/function_fwd.hpp> that provides support for using the Boost.Typeof library on Boost.Function objects.
diff --git a/include/boost/function/function_fwd.hpp b/include/boost/function/function_fwd.hpp
index 1f9b0c8..d2f713a 100644
--- a/include/boost/function/function_fwd.hpp
+++ b/include/boost/function/function_fwd.hpp
@@ -66,4 +66,5 @@ namespace boost {
typename T10>
class function10;
}
+
#endif
diff --git a/include/boost/function/function_typeof.hpp b/include/boost/function/function_typeof.hpp
new file mode 100644
index 0000000..246dc15
--- /dev/null
+++ b/include/boost/function/function_typeof.hpp
@@ -0,0 +1,45 @@
+// Boost.Function library - Typeof support
+// Copyright (C) Douglas Gregor 2008
+//
+// 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
+#ifndef BOOST_FUNCTION_TYPEOF_HPP
+#define BOOST_FUNCTION_TYPEOF_HPP
+#include
+#include
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TYPE(boost::bad_function_call)
+
+#if !defined(BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function, (typename))
+#endif
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function0, (typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function1, (typename)(typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function2, (typename)(typename)(typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function3,
+ (typename)(typename)(typename)(typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function4,
+ (typename)(typename)(typename)(typename)(typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function5,
+ (typename)(typename)(typename)(typename)(typename)(typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function6,
+ (typename)(typename)(typename)(typename)(typename)(typename)(typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function7,
+ (typename)(typename)(typename)(typename)(typename)(typename)(typename)
+ (typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function8,
+ (typename)(typename)(typename)(typename)(typename)(typename)(typename)
+ (typename)(typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function9,
+ (typename)(typename)(typename)(typename)(typename)(typename)(typename)
+ (typename)(typename)(typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function10,
+ (typename)(typename)(typename)(typename)(typename)(typename)(typename)
+ (typename)(typename)(typename)(typename))
+#endif
diff --git a/test/Jamfile.v2 b/test/Jamfile.v2
index f309b41..ef4e0d1 100644
--- a/test/Jamfile.v2
+++ b/test/Jamfile.v2
@@ -59,6 +59,8 @@ import testing ;
[ run libs/function/test/contains2_test.cpp : : : : ]
[ run libs/function/test/nothrow_swap.cpp : : : : ]
+
+ [ compile libs/function/test/function_typeof_test.cpp ]
;
}
diff --git a/test/function_typeof_test.cpp b/test/function_typeof_test.cpp
new file mode 100644
index 0000000..2d77cab
--- /dev/null
+++ b/test/function_typeof_test.cpp
@@ -0,0 +1,18 @@
+// Boost.Function library
+
+// Copyright Douglas Gregor 2008. 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
+#include
+#include
+#include
+#include
+
+void f(boost::function0 f, boost::function0 g)
+{
+ BOOST_STATIC_ASSERT((boost::is_same, BOOST_TYPEOF(f = g)>::value));
+}
diff --git a/test/nothrow_swap.cpp b/test/nothrow_swap.cpp
index 4f222bc..0a5b740 100644
--- a/test/nothrow_swap.cpp
+++ b/test/nothrow_swap.cpp
@@ -1,3 +1,12 @@
+// Boost.Function library
+
+// Copyright Douglas Gregor 2008. 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
#include