2 // bind/bind_template.hpp
4 // Do not include this header directly.
6 // Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd.
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)
12 // See http://www.boost.org/libs/bind/bind.html for documentation.
15 typedef typename result_traits<R, F>::type result_type;
17 result_type operator()()
20 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
23 result_type operator()() const
26 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
29 template<class A1> result_type operator()(A1 & a1)
32 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
35 template<class A1> result_type operator()(A1 & a1) const
38 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
41 #if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
42 && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
44 template<class A1> result_type operator()(A1 const & a1)
46 list1<A1 const &> a(a1);
47 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
50 template<class A1> result_type operator()(A1 const & a1) const
52 list1<A1 const &> a(a1);
53 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
58 template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2)
60 list2<A1 &, A2 &> a(a1, a2);
61 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
64 template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2) const
66 list2<A1 &, A2 &> a(a1, a2);
67 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
70 #if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
71 && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
73 template<class A1, class A2> result_type operator()(A1 const & a1, A2 & a2)
75 list2<A1 const &, A2 &> a(a1, a2);
76 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
79 template<class A1, class A2> result_type operator()(A1 const & a1, A2 & a2) const
81 list2<A1 const &, A2 &> a(a1, a2);
82 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
86 template<class A1, class A2> result_type operator()(A1 & a1, A2 const & a2)
88 list2<A1 &, A2 const &> a(a1, a2);
89 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
92 template<class A1, class A2> result_type operator()(A1 & a1, A2 const & a2) const
94 list2<A1 &, A2 const &> a(a1, a2);
95 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
99 template<class A1, class A2> result_type operator()(A1 const & a1, A2 const & a2)
101 list2<A1 const &, A2 const &> a(a1, a2);
102 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
105 template<class A1, class A2> result_type operator()(A1 const & a1, A2 const & a2) const
107 list2<A1 const &, A2 const &> a(a1, a2);
108 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
113 template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3)
115 list3<A1 &, A2 &, A3 &> a(a1, a2, a3);
116 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
119 template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3) const
121 list3<A1 &, A2 &, A3 &> a(a1, a2, a3);
122 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
125 #if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
126 && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
128 template<class A1, class A2, class A3> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3)
130 list3<A1 const &, A2 const &, A3 const &> a(a1, a2, a3);
131 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
134 template<class A1, class A2, class A3> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3) const
136 list3<A1 const &, A2 const &, A3 const &> a(a1, a2, a3);
137 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
142 template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4)
144 list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4);
145 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
148 template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const
150 list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4);
151 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
154 #if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
155 && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
157 template<class A1, class A2, class A3, class A4> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4)
159 list4<A1 const &, A2 const &, A3 const &, A4 const &> a(a1, a2, a3, a4);
160 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
163 template<class A1, class A2, class A3, class A4> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4) const
165 list4<A1 const &, A2 const &, A3 const &, A4 const &> a(a1, a2, a3, a4);
166 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
171 template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5)
173 list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5);
174 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
177 template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) const
179 list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5);
180 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
183 #if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
184 && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
186 template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5)
188 list5<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &> a(a1, a2, a3, a4, a5);
189 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
192 template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5) const
194 list5<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &> a(a1, a2, a3, a4, a5);
195 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
200 template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6)
202 list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6);
203 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
206 template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) const
208 list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6);
209 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
212 #if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
213 && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
215 template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6)
217 list6<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &> a(a1, a2, a3, a4, a5, a6);
218 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
221 template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6) const
223 list6<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &> a(a1, a2, a3, a4, a5, a6);
224 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
229 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7)
231 list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7);
232 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
235 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) const
237 list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7);
238 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
241 #if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
242 && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
244 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7)
246 list7<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &> a(a1, a2, a3, a4, a5, a6, a7);
247 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
250 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7) const
252 list7<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &> a(a1, a2, a3, a4, a5, a6, a7);
253 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
258 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8)
260 list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8);
261 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
264 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) const
266 list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8);
267 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
270 #if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
271 && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
273 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8)
275 list8<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &, A8 const &> a(a1, a2, a3, a4, a5, a6, a7, a8);
276 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
279 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8) const
281 list8<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &, A8 const &> a(a1, a2, a3, a4, a5, a6, a7, a8);
282 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
287 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9)
289 list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);
290 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
293 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) const
295 list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);
296 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
299 #if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
300 && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
302 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(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)
304 list9<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &, A8 const &, A9 const &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);
305 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
308 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(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) const
310 list9<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &, A8 const &, A9 const &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);
311 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
316 template<class A> result_type eval(A & a)
318 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
321 template<class A> result_type eval(A & a) const
323 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
326 template<class V> void accept(V & v) const
328 #if !defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) && !defined( __BORLANDC__ )
330 using boost::visit_each;
333 BOOST_BIND_VISIT_EACH(v, f_, 0);
337 bool compare(this_type const & rhs) const
339 return ref_compare(f_, rhs.f_, 0) && l_ == rhs.l_;