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/msvc60/set_c.hpp b/ndnboost/mpl/aux_/preprocessed/msvc60/set_c.hpp
new file mode 100644
index 0000000..a9a9b18
--- /dev/null
+++ b/ndnboost/mpl/aux_/preprocessed/msvc60/set_c.hpp
@@ -0,0 +1,534 @@
+
+// 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/set_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace ndnboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct set_c_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct set_c_chooser<0>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set0_c<
+              T
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<1>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set1_c<
+              T, C0
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<2>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set2_c<
+              T, C0, C1
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<3>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set3_c<
+              T, C0, C1, C2
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<4>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set4_c<
+              T, C0, C1, C2, C3
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<5>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set5_c<
+              T, C0, C1, C2, C3, C4
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<6>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set6_c<
+              T, C0, C1, C2, C3, C4, C5
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<7>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set7_c<
+              T, C0, C1, C2, C3, C4, C5, C6
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<8>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set8_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<9>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set9_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<10>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set10_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<11>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set11_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<12>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set12_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<13>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set13_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<14>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set14_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<15>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set15_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<16>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set16_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<17>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set17_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<18>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set18_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<19>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set19_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<20>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set20_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< long C >
+struct is_set_c_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_set_c_arg<LONG_MAX>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8
+    , long C9, long C10, long C11, long C12, long C13, long C14, long C15
+    , long C16, long C17, long C18, long C19, long C20
+    >
+struct set_c_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_set_c_arg<C1>::value + is_set_c_arg<C2>::value 
+        + is_set_c_arg<C3>::value + is_set_c_arg<C4>::value 
+        + is_set_c_arg<C5>::value + is_set_c_arg<C6>::value 
+        + is_set_c_arg<C7>::value + is_set_c_arg<C8>::value 
+        + is_set_c_arg<C9>::value + is_set_c_arg<C10>::value 
+        + is_set_c_arg<C11>::value + is_set_c_arg<C12>::value 
+        + is_set_c_arg<C13>::value + is_set_c_arg<C14>::value 
+        + is_set_c_arg<C15>::value + is_set_c_arg<C16>::value 
+        + is_set_c_arg<C17>::value + is_set_c_arg<C18>::value 
+        + is_set_c_arg<C19>::value + is_set_c_arg<C20>::value
+        );
+
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct set_c_impl
+{
+    typedef aux::set_c_count_args<
+          C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        > arg_num_;
+
+    typedef typename aux::set_c_chooser< arg_num_::value >
+        ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct set_c
+    : aux::set_c_impl<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        >::type
+{
+    typedef typename aux::set_c_impl<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        >::type type;
+};
+
+}}
+