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/ndnboost/mpl/aux_/preprocessed/bcc_pre590/apply_wrap.hpp b/ndnboost/mpl/aux_/preprocessed/bcc_pre590/apply_wrap.hpp
new file mode 100644
index 0000000..28aba33
--- /dev/null
+++ b/ndnboost/mpl/aux_/preprocessed/bcc_pre590/apply_wrap.hpp
@@ -0,0 +1,456 @@
+
+// Copyright Aleksey Gurtovoy 2000-2008
+//
+// 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)
+//
+
+// *Preprocessed* version of the main "apply_wrap.hpp" header
+// -- DO NOT modify by hand!
+
+namespace ndnboost { namespace mpl {
+
+template<
+      int N, typename F
+    >
+struct apply_wrap_impl0;
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          0
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+/// since the defaults are "lost", we have to pass *something* even for nullary
+/// metafunction classes
+        na
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          1
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          2
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na, na
+
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          3
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na, na, na
+
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          4
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na, na, na, na
+
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          5
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na, na, na, na, na
+
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap0
+    : apply_wrap_impl0<
+          ::ndnboost::mpl::aux::arity< F,0 >::value
+        , F
+       
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1
+    >
+struct apply_wrap_impl1;
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          1
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          2
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        , na
+
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          3
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        , na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          4
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        , na, na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          5
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        , na, na, na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap1
+    : apply_wrap_impl1<
+          ::ndnboost::mpl::aux::arity< F,1 >::value
+        , F
+        , T1
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2<
+          2
+        , F
+        , T1, T2
+        >
+{
+    typedef typename F::template apply<
+          T1, T2
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2<
+          3
+        , F
+        , T1, T2
+        >
+{
+    typedef typename F::template apply<
+          T1, T2
+
+        , na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2<
+          4
+        , F
+        , T1, T2
+        >
+{
+    typedef typename F::template apply<
+          T1, T2
+
+        , na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2<
+          5
+        , F
+        , T1, T2
+        >
+{
+    typedef typename F::template apply<
+          T1, T2
+
+        , na, na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap2
+    : apply_wrap_impl2<
+          ::ndnboost::mpl::aux::arity< F,2 >::value
+        , F
+        , T1, T2
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap_impl3;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap_impl3<
+          3
+        , F
+        , T1, T2, T3
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap_impl3<
+          4
+        , F
+        , T1, T2, T3
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3
+
+        , na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap_impl3<
+          5
+        , F
+        , T1, T2, T3
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3
+
+        , na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap3
+    : apply_wrap_impl3<
+          ::ndnboost::mpl::aux::arity< F,3 >::value
+        , F
+        , T1, T2, T3
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply_wrap_impl4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply_wrap_impl4<
+          4
+        , F
+        , T1, T2, T3, T4
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3, T4
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply_wrap_impl4<
+          5
+        , F
+        , T1, T2, T3, T4
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3, T4
+
+        , na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply_wrap4
+    : apply_wrap_impl4<
+          ::ndnboost::mpl::aux::arity< F,4 >::value
+        , F
+        , T1, T2, T3, T4
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply_wrap_impl5;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply_wrap_impl5<
+          5
+        , F
+        , T1, T2, T3, T4, T5
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3, T4, T5
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply_wrap5
+    : apply_wrap_impl5<
+          ::ndnboost::mpl::aux::arity< F,5 >::value
+        , F
+        , T1, T2, T3, T4, T5
+        >::type
+{
+};
+
+}}
+