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