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/msvc70/plus.hpp b/ndnboost/mpl/aux_/preprocessed/msvc70/plus.hpp
new file mode 100644
index 0000000..32c3317
--- /dev/null
+++ b/ndnboost/mpl/aux_/preprocessed/msvc70/plus.hpp
@@ -0,0 +1,150 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// 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 "ndnboost/mpl/plus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace ndnboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct plus_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct plus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct plus_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct plus_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct plus_tag
+    : tag< T,na >
+{
+};
+
+/// forward declaration
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct plus2;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct plus
+
+    : aux::msvc_eti_base< typename if_<
+
+          is_na<N3>
+        , plus2< N1,N2 >
+        , plus<
+              plus2< N1,N2 >
+            , N3, N4, N5
+            >
+        >::type
+
+    >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , plus
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1
+    , typename N2
+    >
+struct plus2
+    : aux::msvc_eti_base< typename apply_wrap2<
+          plus_impl<
+              typename plus_tag<N1>::type
+            , typename plus_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, plus2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
+
+}}
+
+namespace ndnboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct plus_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 + n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct plus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::plus_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}