1 | // |
2 | // bind/bind_cc.hpp - support for different calling conventions |
3 | // |
4 | // Do not include this header directly. |
5 | // |
6 | // Copyright (c) 2001 Peter Dimov and Multi Media Ltd. |
7 | // |
8 | // Distributed under the Boost Software License, Version 1.0. (See |
9 | // accompanying file LICENSE_1_0.txt or copy at |
10 | // http://www.boost.org/LICENSE_1_0.txt) |
11 | // |
12 | // See http://www.boost.org/libs/bind/bind.html for documentation. |
13 | // |
14 | |
15 | template<class R> |
16 | _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) () BOOST_BIND_NOEXCEPT, _bi::list0> |
17 | BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) () BOOST_BIND_NOEXCEPT) |
18 | { |
19 | typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) () BOOST_BIND_NOEXCEPT; |
20 | typedef _bi::list0 list_type; |
21 | return _bi::bind_t<R, F, list_type> (f, list_type()); |
22 | } |
23 | |
24 | template<class R, class B1, class A1> |
25 | _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1) BOOST_BIND_NOEXCEPT, typename _bi::list_av_1<A1>::type> |
26 | BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1) BOOST_BIND_NOEXCEPT, A1 a1) |
27 | { |
28 | typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1) BOOST_BIND_NOEXCEPT; |
29 | typedef typename _bi::list_av_1<A1>::type list_type; |
30 | return _bi::bind_t<R, F, list_type> (f, list_type(a1)); |
31 | } |
32 | |
33 | template<class R, class B1, class B2, class A1, class A2> |
34 | _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2) BOOST_BIND_NOEXCEPT, typename _bi::list_av_2<A1, A2>::type> |
35 | BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2) |
36 | { |
37 | typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2) BOOST_BIND_NOEXCEPT; |
38 | typedef typename _bi::list_av_2<A1, A2>::type list_type; |
39 | return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2)); |
40 | } |
41 | |
42 | template<class R, |
43 | class B1, class B2, class B3, |
44 | class A1, class A2, class A3> |
45 | _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3) BOOST_BIND_NOEXCEPT, typename _bi::list_av_3<A1, A2, A3>::type> |
46 | BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3) |
47 | { |
48 | typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3) BOOST_BIND_NOEXCEPT; |
49 | typedef typename _bi::list_av_3<A1, A2, A3>::type list_type; |
50 | return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3)); |
51 | } |
52 | |
53 | template<class R, |
54 | class B1, class B2, class B3, class B4, |
55 | class A1, class A2, class A3, class A4> |
56 | _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4) BOOST_BIND_NOEXCEPT, typename _bi::list_av_4<A1, A2, A3, A4>::type> |
57 | BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4) |
58 | { |
59 | typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4) BOOST_BIND_NOEXCEPT; |
60 | typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type; |
61 | return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4)); |
62 | } |
63 | |
64 | template<class R, |
65 | class B1, class B2, class B3, class B4, class B5, |
66 | class A1, class A2, class A3, class A4, class A5> |
67 | _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5) BOOST_BIND_NOEXCEPT, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type> |
68 | BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) |
69 | { |
70 | typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5) BOOST_BIND_NOEXCEPT; |
71 | typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type; |
72 | return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5)); |
73 | } |
74 | |
75 | template<class R, |
76 | class B1, class B2, class B3, class B4, class B5, class B6, |
77 | class A1, class A2, class A3, class A4, class A5, class A6> |
78 | _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6) BOOST_BIND_NOEXCEPT, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type> |
79 | BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) |
80 | { |
81 | typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6) BOOST_BIND_NOEXCEPT; |
82 | typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type; |
83 | return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6)); |
84 | } |
85 | |
86 | template<class R, |
87 | class B1, class B2, class B3, class B4, class B5, class B6, class B7, |
88 | class A1, class A2, class A3, class A4, class A5, class A6, class A7> |
89 | _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_NOEXCEPT, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type> |
90 | BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) |
91 | { |
92 | typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_NOEXCEPT; |
93 | typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type; |
94 | return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7)); |
95 | } |
96 | |
97 | template<class R, |
98 | class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, |
99 | class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> |
100 | _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_NOEXCEPT, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type> |
101 | BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) |
102 | { |
103 | typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_NOEXCEPT; |
104 | typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type; |
105 | return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8)); |
106 | } |
107 | |
108 | template<class R, |
109 | class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, class B9, |
110 | class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> |
111 | _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7, B8, B9) BOOST_BIND_NOEXCEPT, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type> |
112 | BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8, B9) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) |
113 | { |
114 | typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7, B8, B9) BOOST_BIND_NOEXCEPT; |
115 | typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type; |
116 | return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); |
117 | } |
118 | |