In common.h, define func_lib for function objects. In configure.ac, define HAVE_STD_FUNCTION and HAVE_BOOST_FUNCTION. Include function headers in ndnboost.
diff --git a/libs/functional/overloaded_function/test/Jamfile.v2 b/libs/functional/overloaded_function/test/Jamfile.v2
new file mode 100644
index 0000000..3871ee5
--- /dev/null
+++ b/libs/functional/overloaded_function/test/Jamfile.v2
@@ -0,0 +1,16 @@
+
+# Copyright (C) 2009-2012 Lorenzo Caminiti
+# Distributed under the Boost Software License, Version 1.0
+# (see accompanying file LICENSE_1_0.txt or a copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+# Home at http://www.boost.org/libs/functional/overloaded_function
+
+import testing ;
+
+# Sun does not automatically detect type-of emulation (force it).
+project : requirements <toolset>sun:<define>BOOST_TYPEOF_EMULATION ;
+
+run functor.cpp ;
+run make_decl.cpp ;
+run make_call.cpp ;
+
diff --git a/libs/functional/overloaded_function/test/functor.cpp b/libs/functional/overloaded_function/test/functor.cpp
new file mode 100644
index 0000000..078d977
--- /dev/null
+++ b/libs/functional/overloaded_function/test/functor.cpp
@@ -0,0 +1,34 @@
+
+// Copyright (C) 2009-2012 Lorenzo Caminiti
+// Distributed under the Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+// Home at http://www.boost.org/libs/functional/overloaded_function
+
+#include "identity.hpp"
+#include <boost/functional/overloaded_function.hpp>
+#include <boost/detail/lightweight_test.hpp>
+
+int main() {
+ //[identity_calls
+ BOOST_TEST(identity_s("abc") == "abc");
+ BOOST_TEST(identity_i(123) == 123);
+ BOOST_TEST(identity_d(1.23) == 1.23);
+ //]
+
+ //[identity_functor
+ ndnboost::overloaded_function<
+ const std::string& (const std::string&)
+ , int (int)
+ , double (double)
+ > identity(identity_s, identity_i, identity_d);
+
+ // All calls via single `identity` function.
+ BOOST_TEST(identity("abc") == "abc");
+ BOOST_TEST(identity(123) == 123);
+ BOOST_TEST(identity(1.23) == 1.23);
+ //]
+
+ return ndnboost::report_errors();
+}
+
diff --git a/libs/functional/overloaded_function/test/identity.hpp b/libs/functional/overloaded_function/test/identity.hpp
new file mode 100644
index 0000000..85c5a2c
--- /dev/null
+++ b/libs/functional/overloaded_function/test/identity.hpp
@@ -0,0 +1,29 @@
+
+// Copyright (C) 2009-2012 Lorenzo Caminiti
+// Distributed under the Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+// Home at http://www.boost.org/libs/functional/overloaded_function
+
+#ifndef IDENTITY_HPP_
+#define IDENTITY_HPP_
+
+//[identity_typeof
+#include <boost/typeof/std/string.hpp> // No need to register `ndnboost::function`.
+//]
+#include <boost/function.hpp>
+#include <string>
+
+//[identity_decls
+const std::string& identity_s(const std::string& x) // Function (as pointer).
+ { return x; }
+
+int identity_i_impl(int x) { return x; }
+int (&identity_i)(int) = identity_i_impl; // Function reference.
+
+double identity_d_impl(double x) { return x; }
+ndnboost::function<double (double)> identity_d = identity_d_impl; // Functor.
+//]
+
+#endif // #include guard
+
diff --git a/libs/functional/overloaded_function/test/make_call.cpp b/libs/functional/overloaded_function/test/make_call.cpp
new file mode 100644
index 0000000..4c55b52
--- /dev/null
+++ b/libs/functional/overloaded_function/test/make_call.cpp
@@ -0,0 +1,27 @@
+
+// Copyright (C) 2009-2012 Lorenzo Caminiti
+// Distributed under the Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+// Home at http://www.boost.org/libs/functional/overloaded_function
+
+#include "identity.hpp"
+#include <boost/functional/overloaded_function.hpp>
+#include <boost/detail/lightweight_test.hpp>
+
+//[identity_make_checks
+template<typename F>
+void check(F identity) {
+ BOOST_TEST(identity("abc") == "abc");
+ BOOST_TEST(identity(123) == 123);
+ BOOST_TEST(identity(1.23) == 1.23);
+}
+//]
+
+int main() {
+ //[identity_make_call
+ check(ndnboost::make_overloaded_function(identity_s, identity_i, identity_d));
+ //]
+ return ndnboost::report_errors();
+}
+
diff --git a/libs/functional/overloaded_function/test/make_decl.cpp b/libs/functional/overloaded_function/test/make_decl.cpp
new file mode 100644
index 0000000..b76834e
--- /dev/null
+++ b/libs/functional/overloaded_function/test/make_decl.cpp
@@ -0,0 +1,24 @@
+
+// Copyright (C) 2009-2012 Lorenzo Caminiti
+// Distributed under the Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+// Home at http://www.boost.org/libs/functional/overloaded_function
+
+#include "identity.hpp"
+#include <boost/functional/overloaded_function.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/detail/lightweight_test.hpp>
+
+int main() {
+ //[identity_make_decl
+ BOOST_AUTO(identity, ndnboost::make_overloaded_function(
+ identity_s, identity_i, identity_d));
+
+ BOOST_TEST(identity("abc") == "abc");
+ BOOST_TEST(identity(123) == 123);
+ BOOST_TEST(identity(1.23) == 1.23);
+ //]
+ return ndnboost::report_errors();
+}
+