]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/libs/phoenix/include/boost/phoenix/bind/detail/cpp03/preprocessed/bind_member_function_20.hpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / phoenix / include / boost / phoenix / bind / detail / cpp03 / preprocessed / bind_member_function_20.hpp
diff --git a/ceph/src/boost/libs/phoenix/include/boost/phoenix/bind/detail/cpp03/preprocessed/bind_member_function_20.hpp b/ceph/src/boost/libs/phoenix/include/boost/phoenix/bind/detail/cpp03/preprocessed/bind_member_function_20.hpp
new file mode 100644 (file)
index 0000000..c2a4554
--- /dev/null
@@ -0,0 +1,2343 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    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)
+==============================================================================*/
+    
+    
+    
+    
+    
+    
+    
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0
+      , typename ClassA
+      , typename A0
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            1
+          , RT
+          , RT(ClassT::*)(T0)
+        >
+      , ClassA
+      , A0
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0)
+      , ClassA const & obj
+      , A0 const& a0
+    )
+    {
+        typedef detail::member_function_ptr<
+            1
+          , RT
+          , RT(ClassT::*)(T0)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0
+            >::make(
+                fp_type(f)
+              , obj
+              , a0
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0
+      , typename ClassA
+      , typename A0
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            1
+          , RT
+          , RT(ClassT::*)(T0) const
+        >
+      , ClassA
+      , A0
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0) const
+      , ClassA const & obj
+      , A0 const& a0
+    )
+    {
+        typedef detail::member_function_ptr<
+            1
+          , RT
+          , RT(ClassT::*)(T0) const
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0
+            >::make(
+                fp_type(f)
+              , obj
+              , a0
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0
+      , typename A0
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            1
+          , RT
+          , RT(ClassT::*)(T0)
+        >
+      , ClassT
+      , A0
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0)
+      , ClassT & obj
+      , A0 const& a0
+    )
+    {
+        typedef detail::member_function_ptr<
+            1
+          , RT
+          , RT(ClassT::*)(T0)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassT
+              , A0
+            >::make(
+                fp_type(f)
+              , obj
+              , a0
+            );
+    }
+    
+    
+    
+    
+    
+    
+    
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1
+      , typename ClassA
+      , typename A0 , typename A1
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            2
+          , RT
+          , RT(ClassT::*)(T0 , T1)
+        >
+      , ClassA
+      , A0 , A1
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1)
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1
+    )
+    {
+        typedef detail::member_function_ptr<
+            2
+          , RT
+          , RT(ClassT::*)(T0 , T1)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1
+      , typename ClassA
+      , typename A0 , typename A1
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            2
+          , RT
+          , RT(ClassT::*)(T0 , T1) const
+        >
+      , ClassA
+      , A0 , A1
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1) const
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1
+    )
+    {
+        typedef detail::member_function_ptr<
+            2
+          , RT
+          , RT(ClassT::*)(T0 , T1) const
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1
+      , typename A0 , typename A1
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            2
+          , RT
+          , RT(ClassT::*)(T0 , T1)
+        >
+      , ClassT
+      , A0 , A1
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1)
+      , ClassT & obj
+      , A0 const& a0 , A1 const& a1
+    )
+    {
+        typedef detail::member_function_ptr<
+            2
+          , RT
+          , RT(ClassT::*)(T0 , T1)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassT
+              , A0 , A1
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1
+            );
+    }
+    
+    
+    
+    
+    
+    
+    
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            3
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2)
+        >
+      , ClassA
+      , A0 , A1 , A2
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2)
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2
+    )
+    {
+        typedef detail::member_function_ptr<
+            3
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            3
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2) const
+        >
+      , ClassA
+      , A0 , A1 , A2
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2) const
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2
+    )
+    {
+        typedef detail::member_function_ptr<
+            3
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2) const
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2
+      , typename A0 , typename A1 , typename A2
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            3
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2)
+        >
+      , ClassT
+      , A0 , A1 , A2
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2)
+      , ClassT & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2
+    )
+    {
+        typedef detail::member_function_ptr<
+            3
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassT
+              , A0 , A1 , A2
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2
+            );
+    }
+    
+    
+    
+    
+    
+    
+    
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            4
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3)
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3)
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3
+    )
+    {
+        typedef detail::member_function_ptr<
+            4
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            4
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3) const
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3) const
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3
+    )
+    {
+        typedef detail::member_function_ptr<
+            4
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3) const
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3
+      , typename A0 , typename A1 , typename A2 , typename A3
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            4
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3)
+        >
+      , ClassT
+      , A0 , A1 , A2 , A3
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3)
+      , ClassT & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3
+    )
+    {
+        typedef detail::member_function_ptr<
+            4
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassT
+              , A0 , A1 , A2 , A3
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3
+            );
+    }
+    
+    
+    
+    
+    
+    
+    
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            5
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4)
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4)
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4
+    )
+    {
+        typedef detail::member_function_ptr<
+            5
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            5
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4) const
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4) const
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4
+    )
+    {
+        typedef detail::member_function_ptr<
+            5
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4) const
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            5
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4)
+        >
+      , ClassT
+      , A0 , A1 , A2 , A3 , A4
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4)
+      , ClassT & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4
+    )
+    {
+        typedef detail::member_function_ptr<
+            5
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassT
+              , A0 , A1 , A2 , A3 , A4
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4
+            );
+    }
+    
+    
+    
+    
+    
+    
+    
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            6
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5)
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5)
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5
+    )
+    {
+        typedef detail::member_function_ptr<
+            6
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            6
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5) const
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5) const
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5
+    )
+    {
+        typedef detail::member_function_ptr<
+            6
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5) const
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            6
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5)
+        >
+      , ClassT
+      , A0 , A1 , A2 , A3 , A4 , A5
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5)
+      , ClassT & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5
+    )
+    {
+        typedef detail::member_function_ptr<
+            6
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassT
+              , A0 , A1 , A2 , A3 , A4 , A5
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5
+            );
+    }
+    
+    
+    
+    
+    
+    
+    
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            7
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6)
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6)
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6
+    )
+    {
+        typedef detail::member_function_ptr<
+            7
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            7
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6) const
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6) const
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6
+    )
+    {
+        typedef detail::member_function_ptr<
+            7
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6) const
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            7
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6)
+        >
+      , ClassT
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6)
+      , ClassT & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6
+    )
+    {
+        typedef detail::member_function_ptr<
+            7
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassT
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6
+            );
+    }
+    
+    
+    
+    
+    
+    
+    
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            8
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7
+    )
+    {
+        typedef detail::member_function_ptr<
+            8
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            8
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7
+    )
+    {
+        typedef detail::member_function_ptr<
+            8
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            8
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)
+        >
+      , ClassT
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)
+      , ClassT & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7
+    )
+    {
+        typedef detail::member_function_ptr<
+            8
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassT
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7
+            );
+    }
+    
+    
+    
+    
+    
+    
+    
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            9
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8
+    )
+    {
+        typedef detail::member_function_ptr<
+            9
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            9
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8
+    )
+    {
+        typedef detail::member_function_ptr<
+            9
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            9
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)
+        >
+      , ClassT
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)
+      , ClassT & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8
+    )
+    {
+        typedef detail::member_function_ptr<
+            9
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassT
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8
+            );
+    }
+    
+    
+    
+    
+    
+    
+    
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            10
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9
+    )
+    {
+        typedef detail::member_function_ptr<
+            10
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            10
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9
+    )
+    {
+        typedef detail::member_function_ptr<
+            10
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            10
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)
+        >
+      , ClassT
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)
+      , ClassT & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9
+    )
+    {
+        typedef detail::member_function_ptr<
+            10
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassT
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9
+            );
+    }
+    
+    
+    
+    
+    
+    
+    
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            11
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10
+    )
+    {
+        typedef detail::member_function_ptr<
+            11
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            11
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10
+    )
+    {
+        typedef detail::member_function_ptr<
+            11
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            11
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)
+        >
+      , ClassT
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)
+      , ClassT & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10
+    )
+    {
+        typedef detail::member_function_ptr<
+            11
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassT
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10
+            );
+    }
+    
+    
+    
+    
+    
+    
+    
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            12
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11
+    )
+    {
+        typedef detail::member_function_ptr<
+            12
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            12
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11
+    )
+    {
+        typedef detail::member_function_ptr<
+            12
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            12
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)
+        >
+      , ClassT
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)
+      , ClassT & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11
+    )
+    {
+        typedef detail::member_function_ptr<
+            12
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassT
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11
+            );
+    }
+    
+    
+    
+    
+    
+    
+    
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            13
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12
+    )
+    {
+        typedef detail::member_function_ptr<
+            13
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            13
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12
+    )
+    {
+        typedef detail::member_function_ptr<
+            13
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            13
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)
+        >
+      , ClassT
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)
+      , ClassT & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12
+    )
+    {
+        typedef detail::member_function_ptr<
+            13
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassT
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12
+            );
+    }
+    
+    
+    
+    
+    
+    
+    
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            14
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13
+    )
+    {
+        typedef detail::member_function_ptr<
+            14
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            14
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13
+    )
+    {
+        typedef detail::member_function_ptr<
+            14
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            14
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)
+        >
+      , ClassT
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)
+      , ClassT & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13
+    )
+    {
+        typedef detail::member_function_ptr<
+            14
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassT
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13
+            );
+    }
+    
+    
+    
+    
+    
+    
+    
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            15
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14
+    )
+    {
+        typedef detail::member_function_ptr<
+            15
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            15
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14
+    )
+    {
+        typedef detail::member_function_ptr<
+            15
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            15
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)
+        >
+      , ClassT
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)
+      , ClassT & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14
+    )
+    {
+        typedef detail::member_function_ptr<
+            15
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassT
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14
+            );
+    }
+    
+    
+    
+    
+    
+    
+    
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            16
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15
+    )
+    {
+        typedef detail::member_function_ptr<
+            16
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            16
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15
+    )
+    {
+        typedef detail::member_function_ptr<
+            16
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            16
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)
+        >
+      , ClassT
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)
+      , ClassT & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15
+    )
+    {
+        typedef detail::member_function_ptr<
+            16
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassT
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15
+            );
+    }
+    
+    
+    
+    
+    
+    
+    
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            17
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16
+    )
+    {
+        typedef detail::member_function_ptr<
+            17
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            17
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16
+    )
+    {
+        typedef detail::member_function_ptr<
+            17
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            17
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)
+        >
+      , ClassT
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)
+      , ClassT & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16
+    )
+    {
+        typedef detail::member_function_ptr<
+            17
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassT
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16
+            );
+    }
+    
+    
+    
+    
+    
+    
+    
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            18
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17
+    )
+    {
+        typedef detail::member_function_ptr<
+            18
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            18
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17
+    )
+    {
+        typedef detail::member_function_ptr<
+            18
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            18
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)
+        >
+      , ClassT
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)
+      , ClassT & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17
+    )
+    {
+        typedef detail::member_function_ptr<
+            18
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassT
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17
+            );
+    }
+    
+    
+    
+    
+    
+    
+    
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            19
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18
+    )
+    {
+        typedef detail::member_function_ptr<
+            19
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18
+      , typename ClassA
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            19
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const
+        >
+      , ClassA
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const
+      , ClassA const & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18
+    )
+    {
+        typedef detail::member_function_ptr<
+            19
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassA
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18
+            );
+    }
+    template <
+        typename RT
+      , typename ClassT
+      , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18
+      , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18
+    >
+    inline
+    typename detail::expression::function_eval<
+        detail::member_function_ptr<
+            19
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)
+        >
+      , ClassT
+      , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18
+    >::type const
+    bind(
+        RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)
+      , ClassT & obj
+      , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18
+    )
+    {
+        typedef detail::member_function_ptr<
+            19
+          , RT
+          , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)
+        > fp_type;
+        return
+            detail::expression::function_eval<
+                fp_type
+              , ClassT
+              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18
+            >::make(
+                fp_type(f)
+              , obj
+              , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18
+            );
+    }