1 #ifndef BOOST_BIND_PROTECT_HPP_INCLUDED
\r
2 #define BOOST_BIND_PROTECT_HPP_INCLUDED
\r
7 // Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
\r
8 // Copyright (c) 2009 Steven Watanabe
\r
10 // Distributed under the Boost Software License, Version 1.0. (See
\r
11 // accompanying file LICENSE_1_0.txt or copy at
\r
12 // http://www.boost.org/LICENSE_1_0.txt)
\r
15 #include <boost/config.hpp>
\r
16 #include <boost/detail/workaround.hpp>
\r
24 template<class F> class protected_bind_t
\r
28 typedef typename F::result_type result_type;
\r
30 explicit protected_bind_t(F f): f_(f)
\r
34 result_type operator()()
\r
39 result_type operator()() const
\r
44 template<class A1> result_type operator()(A1 & a1)
\r
49 template<class A1> result_type operator()(A1 & a1) const
\r
55 #if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
\r
56 && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
\r
58 template<class A1> result_type operator()(const A1 & a1)
\r
63 template<class A1> result_type operator()(const A1 & a1) const
\r
70 template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2)
\r
75 template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2) const
\r
80 #if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
\r
81 && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
\r
83 template<class A1, class A2> result_type operator()(A1 const & a1, A2 & a2)
\r
88 template<class A1, class A2> result_type operator()(A1 const & a1, A2 & a2) const
\r
93 template<class A1, class A2> result_type operator()(A1 & a1, A2 const & a2)
\r
98 template<class A1, class A2> result_type operator()(A1 & a1, A2 const & a2) const
\r
103 template<class A1, class A2> result_type operator()(A1 const & a1, A2 const & a2)
\r
108 template<class A1, class A2> result_type operator()(A1 const & a1, A2 const & a2) const
\r
115 template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3)
\r
117 return f_(a1, a2, a3);
\r
120 template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3) const
\r
122 return f_(a1, a2, a3);
\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 return f_(a1, a2, a3);
\r
133 template<class A1, class A2, class A3> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3) const
\r
135 return f_(a1, a2, a3);
\r
140 template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4)
\r
142 return f_(a1, a2, a3, a4);
\r
145 template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const
\r
147 return f_(a1, a2, a3, a4);
\r
150 #if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
\r
151 && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
\r
153 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
155 return f_(a1, a2, a3, a4);
\r
158 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
160 return f_(a1, a2, a3, a4);
\r
165 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
167 return f_(a1, a2, a3, a4, a5);
\r
170 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
172 return f_(a1, a2, a3, a4, a5);
\r
175 #if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
\r
176 && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
\r
178 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
180 return f_(a1, a2, a3, a4, a5);
\r
183 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
185 return f_(a1, a2, a3, a4, a5);
\r
190 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
192 return f_(a1, a2, a3, a4, a5, a6);
\r
195 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
197 return f_(a1, a2, a3, a4, a5, a6);
\r
200 #if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
\r
201 && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
\r
203 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
205 return f_(a1, a2, a3, a4, a5, a6);
\r
208 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
210 return f_(a1, a2, a3, a4, a5, a6);
\r
215 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
217 return f_(a1, a2, a3, a4, a5, a6, a7);
\r
220 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
222 return f_(a1, a2, a3, a4, a5, a6, a7);
\r
225 #if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
\r
226 && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
\r
228 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
230 return f_(a1, a2, a3, a4, a5, a6, a7);
\r
233 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
235 return f_(a1, a2, a3, a4, a5, a6, a7);
\r
240 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
242 return f_(a1, a2, a3, a4, a5, a6, a7, a8);
\r
245 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
247 return f_(a1, a2, a3, a4, a5, a6, a7, a8);
\r
250 #if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
\r
251 && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
\r
253 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
255 return f_(a1, a2, a3, a4, a5, a6, a7, a8);
\r
258 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
260 return f_(a1, a2, a3, a4, a5, a6, a7, a8);
\r
265 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
267 return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9);
\r
270 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
272 return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9);
\r
275 #if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
\r
276 && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
\r
278 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
280 return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9);
\r
283 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
285 return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9);
\r
297 template<class F> _bi::protected_bind_t<F> protect(F f)
\r
299 return _bi::protected_bind_t<F>(f);
\r
302 } // namespace boost
\r
304 #endif // #ifndef BOOST_BIND_PROTECT_HPP_INCLUDED
\r