First public contribution.
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 template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4)
127 list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4);
128 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
131 template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const
133 list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4);
134 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
137 template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5)
139 list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5);
140 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
143 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
145 list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5);
146 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
149 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)
151 list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6);
152 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
155 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
157 list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6);
158 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
161 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)
163 list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7);
164 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
167 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
169 list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7);
170 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
173 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)
175 list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8);
176 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
179 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
181 list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8);
182 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
185 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)
187 list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);
188 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
191 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
193 list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);
194 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
197 template<class A> result_type eval(A & a)
199 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
202 template<class A> result_type eval(A & a) const
204 BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
207 template<class V> void accept(V & v) const
209 #if !defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) && !defined( __BORLANDC__ )
211 using boost::visit_each;
214 BOOST_BIND_VISIT_EACH(v, f_, 0);
218 bool compare(this_type const & rhs) const
220 return ref_compare(f_, rhs.f_, 0) && l_ == rhs.l_;