2 /* Do not edit! -- generated file */
3 #ifndef _SIGC_ADAPTORS_BIND_H_
4 #define _SIGC_ADAPTORS_BIND_H_
5 #include <sigc++/adaptors/adaptor_trait.h>
6 #include <sigc++/adaptors/bound_argument.h>
8 //TODO: See comment in functor_trait.h.
9 #if defined(nil) && defined(SIGC_PRAGMA_PUSH_POP_MACRO)
10 #define SIGC_NIL_HAS_BEEN_PUSHED 1
11 #pragma push_macro("nil")
17 #ifndef DOXYGEN_SHOULD_SKIP_THIS
21 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7>
23 { static const int value=0; };
24 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
25 struct count_void<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,void>
26 { static const int value=1; };
27 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
28 struct count_void<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,void,void>
29 { static const int value=2; };
30 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4>
31 struct count_void<T_arg1,T_arg2,T_arg3,T_arg4,void,void,void>
32 { static const int value=3; };
33 template <class T_arg1,class T_arg2,class T_arg3>
34 struct count_void<T_arg1,T_arg2,T_arg3,void,void,void,void>
35 { static const int value=4; };
36 template <class T_arg1,class T_arg2>
37 struct count_void<T_arg1,T_arg2,void,void,void,void,void>
38 { static const int value=5; };
39 template <class T_arg1>
40 struct count_void<T_arg1,void,void,void,void,void,void>
41 { static const int value=6; };
43 struct count_void<void,void,void,void,void,void,void>
44 { static const int value=7; };
46 } /* namespace internal */
48 #endif /*DOXYGEN_SHOULD_SKIP_THIS*/
51 /** @defgroup bind bind(), bind_return()
52 * sigc::bind() alters an arbitrary functor by fixing arguments to certain values.
53 * Up to 7 arguments can be bound at a time.
54 * For single argument binding, overloads of sigc::bind() are provided that let you
55 * specify the zero-based position of the argument to fix with the first template parameter.
56 * (A value of @p -1 fixes the last argument so sigc::bind<-1>() gives the same result as sigc::bind().)
57 * The types of the arguments can optionally be specified if not deduced.
61 * void foo(int, int, int);
62 * // single argument binding ...
63 * sigc::bind(&foo,1)(2,3); //fixes the last (third) argument and calls foo(2,3,1)
64 * sigc::bind<-1>(&foo,1)(2,3); //same as bind(&foo,1)(2,3) (calls foo(2,3,1))
65 * sigc::bind<0>(&foo,1)(2,3); //fixes the first argument and calls foo(1,2,3)
66 * sigc::bind<1>(&foo,1)(2,3); //fixes the second argument and calls foo(2,1,3)
67 * sigc::bind<2>(&foo,1)(2,3); //fixes the third argument and calls foo(2,3,1)
68 * // multi argument binding ...
69 * sigc::bind(&foo,1,2)(3); //fixes the last two arguments and calls foo(3,1,2)
70 * sigc::bind(&foo,1,2,3)(); //fixes all three arguments and calls foo(1,2,3)
73 * The functor sigc::bind() returns can be passed into
74 * sigc::signal::connect() directly.
78 * sigc::signal<void> some_signal;
80 * some_signal.connect(sigc::bind(&foo,1));
83 * sigc::bind_return() alters an arbitrary functor by
84 * fixing its return value to a certain value.
89 * std::cout << sigc::bind_return(&foo, 5)(); // calls foo() and returns 5
92 * You can bind references to functors by passing the objects through
93 * the std::ref() or std::cref() functions.
98 * sigc::signal<void> some_signal;
100 * some_signal.connect(sigc::bind(&foo, std::ref(some_int)));
103 * If you bind an object of a sigc::trackable derived type to a functor
104 * by reference, a slot assigned to the bind adaptor is cleared automatically
105 * when the object goes out of scope.
109 * struct bar : public sigc::trackable {} some_bar;
110 * sigc::signal<void> some_signal;
112 * some_signal.connect(sigc::bind(&foo, std::ref(some_bar)));
113 * // disconnected automatically if some_bar goes out of scope
119 /** Adaptor that binds an argument to the wrapped functor.
120 * Use the convenience function sigc::bind() to create an instance of sigc::bind_functor.
122 * The following template arguments are used:
123 * - @e I_location Zero-based position of the argument to fix (@p -1 for the last argument).
124 * - @e T_type1 Type of the 1st bound argument.
125 * - @e T_type2 Type of the 2nd bound argument.
126 * - @e T_type3 Type of the 3rd bound argument.
127 * - @e T_type4 Type of the 4th bound argument.
128 * - @e T_type5 Type of the 5th bound argument.
129 * - @e T_type6 Type of the 6th bound argument.
130 * - @e T_type7 Type of the 7th bound argument.
131 * - @e T_functor Type of the functor to wrap.
135 template <int I_location, class T_functor, class T_type1=nil, class T_type2=nil, class T_type3=nil, class T_type4=nil, class T_type5=nil, class T_type6=nil, class T_type7=nil>
136 #ifndef DOXYGEN_SHOULD_SKIP_THIS
139 struct bind_functor {};
142 /** Adaptor that binds an argument to the wrapped functor.
143 * This template specialization fixes the 1st argument of the wrapped functor.
147 template <class T_functor, class T_bound>
148 struct bind_functor<0, T_functor, T_bound, nil, nil, nil, nil, nil, nil> : public adapts<T_functor>
150 typedef typename adapts<T_functor>::adaptor_type adaptor_type;
152 #ifndef DOXYGEN_SHOULD_SKIP_THIS
153 template <class T_arg1=void, class T_arg2=void, class T_arg3=void, class T_arg4=void, class T_arg5=void, class T_arg6=void, class T_arg7=void>
154 struct deduce_result_type
155 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<T_arg6>>::type type; };
157 typedef typename adaptor_type::result_type result_type;
159 /** Invokes the wrapped functor passing on the bound argument only.
160 * @return The return value of the functor invocation.
165 //Note: The AIX compiler sometimes gives linker errors if we do not define this in the class.
166 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_bound>::type>> (bound_.invoke());
169 /** Invokes the wrapped functor passing on the arguments.
170 * bound_ is passed as the 1st argument.
171 * @param _A_arg1 Argument to be passed on to the functor.
172 * @return The return value of the functor invocation.
174 template <class T_arg1>
175 typename deduce_result_type<T_arg1>::type
176 operator()(T_arg1 _A_arg1)
177 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg1>>
178 (bound_.invoke(), _A_arg1);
181 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
182 template <class T_arg1>
183 typename deduce_result_type<T_arg1>::type
184 sun_forte_workaround(T_arg1 _A_arg1)
185 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg1>>
186 (bound_.invoke(), _A_arg1);
190 /** Invokes the wrapped functor passing on the arguments.
191 * bound_ is passed as the 1st argument.
192 * @param _A_arg1 Argument to be passed on to the functor.
193 * @param _A_arg2 Argument to be passed on to the functor.
194 * @return The return value of the functor invocation.
196 template <class T_arg1, class T_arg2>
197 typename deduce_result_type<T_arg1, T_arg2>::type
198 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2)
199 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>>
200 (bound_.invoke(), _A_arg1, _A_arg2);
203 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
204 template <class T_arg1, class T_arg2>
205 typename deduce_result_type<T_arg1, T_arg2>::type
206 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2)
207 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>>
208 (bound_.invoke(), _A_arg1, _A_arg2);
212 /** Invokes the wrapped functor passing on the arguments.
213 * bound_ is passed as the 1st argument.
214 * @param _A_arg1 Argument to be passed on to the functor.
215 * @param _A_arg2 Argument to be passed on to the functor.
216 * @param _A_arg3 Argument to be passed on to the functor.
217 * @return The return value of the functor invocation.
219 template <class T_arg1, class T_arg2, class T_arg3>
220 typename deduce_result_type<T_arg1, T_arg2, T_arg3>::type
221 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3)
222 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>>
223 (bound_.invoke(), _A_arg1, _A_arg2, _A_arg3);
226 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
227 template <class T_arg1, class T_arg2, class T_arg3>
228 typename deduce_result_type<T_arg1, T_arg2, T_arg3>::type
229 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3)
230 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>>
231 (bound_.invoke(), _A_arg1, _A_arg2, _A_arg3);
235 /** Invokes the wrapped functor passing on the arguments.
236 * bound_ is passed as the 1st argument.
237 * @param _A_arg1 Argument to be passed on to the functor.
238 * @param _A_arg2 Argument to be passed on to the functor.
239 * @param _A_arg3 Argument to be passed on to the functor.
240 * @param _A_arg4 Argument to be passed on to the functor.
241 * @return The return value of the functor invocation.
243 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4>
244 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4>::type
245 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4)
246 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>>
247 (bound_.invoke(), _A_arg1, _A_arg2, _A_arg3, _A_arg4);
250 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
251 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4>
252 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4>::type
253 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4)
254 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>>
255 (bound_.invoke(), _A_arg1, _A_arg2, _A_arg3, _A_arg4);
259 /** Invokes the wrapped functor passing on the arguments.
260 * bound_ is passed as the 1st argument.
261 * @param _A_arg1 Argument to be passed on to the functor.
262 * @param _A_arg2 Argument to be passed on to the functor.
263 * @param _A_arg3 Argument to be passed on to the functor.
264 * @param _A_arg4 Argument to be passed on to the functor.
265 * @param _A_arg5 Argument to be passed on to the functor.
266 * @return The return value of the functor invocation.
268 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5>
269 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>::type
270 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5)
271 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>>
272 (bound_.invoke(), _A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5);
275 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
276 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5>
277 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>::type
278 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5)
279 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>>
280 (bound_.invoke(), _A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5);
284 /** Invokes the wrapped functor passing on the arguments.
285 * bound_ is passed as the 1st argument.
286 * @param _A_arg1 Argument to be passed on to the functor.
287 * @param _A_arg2 Argument to be passed on to the functor.
288 * @param _A_arg3 Argument to be passed on to the functor.
289 * @param _A_arg4 Argument to be passed on to the functor.
290 * @param _A_arg5 Argument to be passed on to the functor.
291 * @param _A_arg6 Argument to be passed on to the functor.
292 * @return The return value of the functor invocation.
294 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6>
295 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>::type
296 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5, T_arg6 _A_arg6)
297 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<T_arg6>>
298 (bound_.invoke(), _A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5, _A_arg6);
301 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
302 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6>
303 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>::type
304 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5, T_arg6 _A_arg6)
305 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<T_arg6>>
306 (bound_.invoke(), _A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5, _A_arg6);
310 /** Constructs a bind_functor object that binds an argument to the passed functor.
311 * @param _A_func Functor to invoke from operator()().
312 * @param _A_bound Argument to bind to the functor.
314 bind_functor(type_trait_take_t<T_functor> _A_func, type_trait_take_t<T_bound> _A_bound)
315 : adapts<T_functor>(_A_func), bound_(_A_bound)
318 /// The argument bound to the functor.
319 bound_argument<T_bound> bound_;
322 #ifndef DOXYGEN_SHOULD_SKIP_THIS
323 /** Adaptor that binds an argument to the wrapped functor.
324 * This template specialization fixes the 2nd argument of the wrapped functor.
328 template <class T_functor, class T_bound>
329 struct bind_functor<1, T_functor, T_bound, nil, nil, nil, nil, nil, nil> : public adapts<T_functor>
331 typedef typename adapts<T_functor>::adaptor_type adaptor_type;
333 template <class T_arg1=void, class T_arg2=void, class T_arg3=void, class T_arg4=void, class T_arg5=void, class T_arg6=void, class T_arg7=void>
334 struct deduce_result_type
335 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<T_arg6>>::type type; };
336 typedef typename adaptor_type::result_type result_type;
338 /** Invokes the wrapped functor passing on the bound argument only.
339 * @return The return value of the functor invocation.
344 //Note: The AIX compiler sometimes gives linker errors if we do not define this in the class.
345 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_bound>::type>> (bound_.invoke());
348 /** Invokes the wrapped functor passing on the arguments.
349 * bound_ is passed as the 2nd argument.
350 * @param _A_arg1 Argument to be passed on to the functor.
351 * @return The return value of the functor invocation.
353 template <class T_arg1>
354 typename deduce_result_type<T_arg1>::type
355 operator()(T_arg1 _A_arg1)
356 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>>
357 (_A_arg1, bound_.invoke());
360 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
361 template <class T_arg1>
362 typename deduce_result_type<T_arg1>::type
363 sun_forte_workaround(T_arg1 _A_arg1)
364 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>>
365 (_A_arg1, bound_.invoke());
369 /** Invokes the wrapped functor passing on the arguments.
370 * bound_ is passed as the 2nd argument.
371 * @param _A_arg1 Argument to be passed on to the functor.
372 * @param _A_arg2 Argument to be passed on to the functor.
373 * @return The return value of the functor invocation.
375 template <class T_arg1, class T_arg2>
376 typename deduce_result_type<T_arg1, T_arg2>::type
377 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2)
378 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg2>>
379 (_A_arg1, bound_.invoke(), _A_arg2);
382 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
383 template <class T_arg1, class T_arg2>
384 typename deduce_result_type<T_arg1, T_arg2>::type
385 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2)
386 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg2>>
387 (_A_arg1, bound_.invoke(), _A_arg2);
391 /** Invokes the wrapped functor passing on the arguments.
392 * bound_ is passed as the 2nd argument.
393 * @param _A_arg1 Argument to be passed on to the functor.
394 * @param _A_arg2 Argument to be passed on to the functor.
395 * @param _A_arg3 Argument to be passed on to the functor.
396 * @return The return value of the functor invocation.
398 template <class T_arg1, class T_arg2, class T_arg3>
399 typename deduce_result_type<T_arg1, T_arg2, T_arg3>::type
400 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3)
401 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>>
402 (_A_arg1, bound_.invoke(), _A_arg2, _A_arg3);
405 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
406 template <class T_arg1, class T_arg2, class T_arg3>
407 typename deduce_result_type<T_arg1, T_arg2, T_arg3>::type
408 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3)
409 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>>
410 (_A_arg1, bound_.invoke(), _A_arg2, _A_arg3);
414 /** Invokes the wrapped functor passing on the arguments.
415 * bound_ is passed as the 2nd argument.
416 * @param _A_arg1 Argument to be passed on to the functor.
417 * @param _A_arg2 Argument to be passed on to the functor.
418 * @param _A_arg3 Argument to be passed on to the functor.
419 * @param _A_arg4 Argument to be passed on to the functor.
420 * @return The return value of the functor invocation.
422 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4>
423 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4>::type
424 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4)
425 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>>
426 (_A_arg1, bound_.invoke(), _A_arg2, _A_arg3, _A_arg4);
429 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
430 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4>
431 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4>::type
432 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4)
433 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>>
434 (_A_arg1, bound_.invoke(), _A_arg2, _A_arg3, _A_arg4);
438 /** Invokes the wrapped functor passing on the arguments.
439 * bound_ is passed as the 2nd argument.
440 * @param _A_arg1 Argument to be passed on to the functor.
441 * @param _A_arg2 Argument to be passed on to the functor.
442 * @param _A_arg3 Argument to be passed on to the functor.
443 * @param _A_arg4 Argument to be passed on to the functor.
444 * @param _A_arg5 Argument to be passed on to the functor.
445 * @return The return value of the functor invocation.
447 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5>
448 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>::type
449 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5)
450 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>>
451 (_A_arg1, bound_.invoke(), _A_arg2, _A_arg3, _A_arg4, _A_arg5);
454 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
455 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5>
456 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>::type
457 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5)
458 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>>
459 (_A_arg1, bound_.invoke(), _A_arg2, _A_arg3, _A_arg4, _A_arg5);
463 /** Invokes the wrapped functor passing on the arguments.
464 * bound_ is passed as the 2nd argument.
465 * @param _A_arg1 Argument to be passed on to the functor.
466 * @param _A_arg2 Argument to be passed on to the functor.
467 * @param _A_arg3 Argument to be passed on to the functor.
468 * @param _A_arg4 Argument to be passed on to the functor.
469 * @param _A_arg5 Argument to be passed on to the functor.
470 * @param _A_arg6 Argument to be passed on to the functor.
471 * @return The return value of the functor invocation.
473 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6>
474 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>::type
475 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5, T_arg6 _A_arg6)
476 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<T_arg6>>
477 (_A_arg1, bound_.invoke(), _A_arg2, _A_arg3, _A_arg4, _A_arg5, _A_arg6);
480 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
481 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6>
482 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>::type
483 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5, T_arg6 _A_arg6)
484 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<T_arg6>>
485 (_A_arg1, bound_.invoke(), _A_arg2, _A_arg3, _A_arg4, _A_arg5, _A_arg6);
489 /** Constructs a bind_functor object that binds an argument to the passed functor.
490 * @param _A_func Functor to invoke from operator()().
491 * @param _A_bound Argument to bind to the functor.
493 bind_functor(type_trait_take_t<T_functor> _A_func, type_trait_take_t<T_bound> _A_bound)
494 : adapts<T_functor>(_A_func), bound_(_A_bound)
497 /// The argument bound to the functor.
498 bound_argument<T_bound> bound_;
501 /** Adaptor that binds an argument to the wrapped functor.
502 * This template specialization fixes the 3rd argument of the wrapped functor.
506 template <class T_functor, class T_bound>
507 struct bind_functor<2, T_functor, T_bound, nil, nil, nil, nil, nil, nil> : public adapts<T_functor>
509 typedef typename adapts<T_functor>::adaptor_type adaptor_type;
511 template <class T_arg1=void, class T_arg2=void, class T_arg3=void, class T_arg4=void, class T_arg5=void, class T_arg6=void, class T_arg7=void>
512 struct deduce_result_type
513 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<T_arg6>>::type type; };
514 typedef typename adaptor_type::result_type result_type;
516 /** Invokes the wrapped functor passing on the bound argument only.
517 * @return The return value of the functor invocation.
522 //Note: The AIX compiler sometimes gives linker errors if we do not define this in the class.
523 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_bound>::type>> (bound_.invoke());
526 /** Invokes the wrapped functor passing on the arguments.
527 * bound_ is passed as the 3rd argument.
528 * @param _A_arg1 Argument to be passed on to the functor.
529 * @param _A_arg2 Argument to be passed on to the functor.
530 * @return The return value of the functor invocation.
532 template <class T_arg1, class T_arg2>
533 typename deduce_result_type<T_arg1, T_arg2>::type
534 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2)
535 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>>
536 (_A_arg1, _A_arg2, bound_.invoke());
539 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
540 template <class T_arg1, class T_arg2>
541 typename deduce_result_type<T_arg1, T_arg2>::type
542 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2)
543 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>>
544 (_A_arg1, _A_arg2, bound_.invoke());
548 /** Invokes the wrapped functor passing on the arguments.
549 * bound_ is passed as the 3rd argument.
550 * @param _A_arg1 Argument to be passed on to the functor.
551 * @param _A_arg2 Argument to be passed on to the functor.
552 * @param _A_arg3 Argument to be passed on to the functor.
553 * @return The return value of the functor invocation.
555 template <class T_arg1, class T_arg2, class T_arg3>
556 typename deduce_result_type<T_arg1, T_arg2, T_arg3>::type
557 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3)
558 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg3>>
559 (_A_arg1, _A_arg2, bound_.invoke(), _A_arg3);
562 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
563 template <class T_arg1, class T_arg2, class T_arg3>
564 typename deduce_result_type<T_arg1, T_arg2, T_arg3>::type
565 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3)
566 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg3>>
567 (_A_arg1, _A_arg2, bound_.invoke(), _A_arg3);
571 /** Invokes the wrapped functor passing on the arguments.
572 * bound_ is passed as the 3rd argument.
573 * @param _A_arg1 Argument to be passed on to the functor.
574 * @param _A_arg2 Argument to be passed on to the functor.
575 * @param _A_arg3 Argument to be passed on to the functor.
576 * @param _A_arg4 Argument to be passed on to the functor.
577 * @return The return value of the functor invocation.
579 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4>
580 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4>::type
581 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4)
582 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>>
583 (_A_arg1, _A_arg2, bound_.invoke(), _A_arg3, _A_arg4);
586 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
587 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4>
588 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4>::type
589 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4)
590 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>>
591 (_A_arg1, _A_arg2, bound_.invoke(), _A_arg3, _A_arg4);
595 /** Invokes the wrapped functor passing on the arguments.
596 * bound_ is passed as the 3rd argument.
597 * @param _A_arg1 Argument to be passed on to the functor.
598 * @param _A_arg2 Argument to be passed on to the functor.
599 * @param _A_arg3 Argument to be passed on to the functor.
600 * @param _A_arg4 Argument to be passed on to the functor.
601 * @param _A_arg5 Argument to be passed on to the functor.
602 * @return The return value of the functor invocation.
604 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5>
605 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>::type
606 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5)
607 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>>
608 (_A_arg1, _A_arg2, bound_.invoke(), _A_arg3, _A_arg4, _A_arg5);
611 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
612 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5>
613 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>::type
614 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5)
615 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>>
616 (_A_arg1, _A_arg2, bound_.invoke(), _A_arg3, _A_arg4, _A_arg5);
620 /** Invokes the wrapped functor passing on the arguments.
621 * bound_ is passed as the 3rd argument.
622 * @param _A_arg1 Argument to be passed on to the functor.
623 * @param _A_arg2 Argument to be passed on to the functor.
624 * @param _A_arg3 Argument to be passed on to the functor.
625 * @param _A_arg4 Argument to be passed on to the functor.
626 * @param _A_arg5 Argument to be passed on to the functor.
627 * @param _A_arg6 Argument to be passed on to the functor.
628 * @return The return value of the functor invocation.
630 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6>
631 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>::type
632 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5, T_arg6 _A_arg6)
633 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<T_arg6>>
634 (_A_arg1, _A_arg2, bound_.invoke(), _A_arg3, _A_arg4, _A_arg5, _A_arg6);
637 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
638 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6>
639 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>::type
640 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5, T_arg6 _A_arg6)
641 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<T_arg6>>
642 (_A_arg1, _A_arg2, bound_.invoke(), _A_arg3, _A_arg4, _A_arg5, _A_arg6);
646 /** Constructs a bind_functor object that binds an argument to the passed functor.
647 * @param _A_func Functor to invoke from operator()().
648 * @param _A_bound Argument to bind to the functor.
650 bind_functor(type_trait_take_t<T_functor> _A_func, type_trait_take_t<T_bound> _A_bound)
651 : adapts<T_functor>(_A_func), bound_(_A_bound)
654 /// The argument bound to the functor.
655 bound_argument<T_bound> bound_;
658 /** Adaptor that binds an argument to the wrapped functor.
659 * This template specialization fixes the 4th argument of the wrapped functor.
663 template <class T_functor, class T_bound>
664 struct bind_functor<3, T_functor, T_bound, nil, nil, nil, nil, nil, nil> : public adapts<T_functor>
666 typedef typename adapts<T_functor>::adaptor_type adaptor_type;
668 template <class T_arg1=void, class T_arg2=void, class T_arg3=void, class T_arg4=void, class T_arg5=void, class T_arg6=void, class T_arg7=void>
669 struct deduce_result_type
670 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<T_arg6>>::type type; };
671 typedef typename adaptor_type::result_type result_type;
673 /** Invokes the wrapped functor passing on the bound argument only.
674 * @return The return value of the functor invocation.
679 //Note: The AIX compiler sometimes gives linker errors if we do not define this in the class.
680 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_bound>::type>> (bound_.invoke());
683 /** Invokes the wrapped functor passing on the arguments.
684 * bound_ is passed as the 4th argument.
685 * @param _A_arg1 Argument to be passed on to the functor.
686 * @param _A_arg2 Argument to be passed on to the functor.
687 * @param _A_arg3 Argument to be passed on to the functor.
688 * @return The return value of the functor invocation.
690 template <class T_arg1, class T_arg2, class T_arg3>
691 typename deduce_result_type<T_arg1, T_arg2, T_arg3>::type
692 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3)
693 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>>
694 (_A_arg1, _A_arg2, _A_arg3, bound_.invoke());
697 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
698 template <class T_arg1, class T_arg2, class T_arg3>
699 typename deduce_result_type<T_arg1, T_arg2, T_arg3>::type
700 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3)
701 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>>
702 (_A_arg1, _A_arg2, _A_arg3, bound_.invoke());
706 /** Invokes the wrapped functor passing on the arguments.
707 * bound_ is passed as the 4th argument.
708 * @param _A_arg1 Argument to be passed on to the functor.
709 * @param _A_arg2 Argument to be passed on to the functor.
710 * @param _A_arg3 Argument to be passed on to the functor.
711 * @param _A_arg4 Argument to be passed on to the functor.
712 * @return The return value of the functor invocation.
714 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4>
715 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4>::type
716 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4)
717 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg4>>
718 (_A_arg1, _A_arg2, _A_arg3, bound_.invoke(), _A_arg4);
721 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
722 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4>
723 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4>::type
724 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4)
725 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg4>>
726 (_A_arg1, _A_arg2, _A_arg3, bound_.invoke(), _A_arg4);
730 /** Invokes the wrapped functor passing on the arguments.
731 * bound_ is passed as the 4th argument.
732 * @param _A_arg1 Argument to be passed on to the functor.
733 * @param _A_arg2 Argument to be passed on to the functor.
734 * @param _A_arg3 Argument to be passed on to the functor.
735 * @param _A_arg4 Argument to be passed on to the functor.
736 * @param _A_arg5 Argument to be passed on to the functor.
737 * @return The return value of the functor invocation.
739 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5>
740 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>::type
741 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5)
742 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>>
743 (_A_arg1, _A_arg2, _A_arg3, bound_.invoke(), _A_arg4, _A_arg5);
746 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
747 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5>
748 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>::type
749 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5)
750 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>>
751 (_A_arg1, _A_arg2, _A_arg3, bound_.invoke(), _A_arg4, _A_arg5);
755 /** Invokes the wrapped functor passing on the arguments.
756 * bound_ is passed as the 4th argument.
757 * @param _A_arg1 Argument to be passed on to the functor.
758 * @param _A_arg2 Argument to be passed on to the functor.
759 * @param _A_arg3 Argument to be passed on to the functor.
760 * @param _A_arg4 Argument to be passed on to the functor.
761 * @param _A_arg5 Argument to be passed on to the functor.
762 * @param _A_arg6 Argument to be passed on to the functor.
763 * @return The return value of the functor invocation.
765 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6>
766 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>::type
767 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5, T_arg6 _A_arg6)
768 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<T_arg6>>
769 (_A_arg1, _A_arg2, _A_arg3, bound_.invoke(), _A_arg4, _A_arg5, _A_arg6);
772 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
773 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6>
774 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>::type
775 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5, T_arg6 _A_arg6)
776 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<T_arg6>>
777 (_A_arg1, _A_arg2, _A_arg3, bound_.invoke(), _A_arg4, _A_arg5, _A_arg6);
781 /** Constructs a bind_functor object that binds an argument to the passed functor.
782 * @param _A_func Functor to invoke from operator()().
783 * @param _A_bound Argument to bind to the functor.
785 bind_functor(type_trait_take_t<T_functor> _A_func, type_trait_take_t<T_bound> _A_bound)
786 : adapts<T_functor>(_A_func), bound_(_A_bound)
789 /// The argument bound to the functor.
790 bound_argument<T_bound> bound_;
793 /** Adaptor that binds an argument to the wrapped functor.
794 * This template specialization fixes the 5th argument of the wrapped functor.
798 template <class T_functor, class T_bound>
799 struct bind_functor<4, T_functor, T_bound, nil, nil, nil, nil, nil, nil> : public adapts<T_functor>
801 typedef typename adapts<T_functor>::adaptor_type adaptor_type;
803 template <class T_arg1=void, class T_arg2=void, class T_arg3=void, class T_arg4=void, class T_arg5=void, class T_arg6=void, class T_arg7=void>
804 struct deduce_result_type
805 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg5>, type_trait_pass_t<T_arg6>>::type type; };
806 typedef typename adaptor_type::result_type result_type;
808 /** Invokes the wrapped functor passing on the bound argument only.
809 * @return The return value of the functor invocation.
814 //Note: The AIX compiler sometimes gives linker errors if we do not define this in the class.
815 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_bound>::type>> (bound_.invoke());
818 /** Invokes the wrapped functor passing on the arguments.
819 * bound_ is passed as the 5th argument.
820 * @param _A_arg1 Argument to be passed on to the functor.
821 * @param _A_arg2 Argument to be passed on to the functor.
822 * @param _A_arg3 Argument to be passed on to the functor.
823 * @param _A_arg4 Argument to be passed on to the functor.
824 * @return The return value of the functor invocation.
826 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4>
827 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4>::type
828 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4)
829 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>>
830 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, bound_.invoke());
833 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
834 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4>
835 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4>::type
836 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4)
837 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>>
838 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, bound_.invoke());
842 /** Invokes the wrapped functor passing on the arguments.
843 * bound_ is passed as the 5th argument.
844 * @param _A_arg1 Argument to be passed on to the functor.
845 * @param _A_arg2 Argument to be passed on to the functor.
846 * @param _A_arg3 Argument to be passed on to the functor.
847 * @param _A_arg4 Argument to be passed on to the functor.
848 * @param _A_arg5 Argument to be passed on to the functor.
849 * @return The return value of the functor invocation.
851 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5>
852 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>::type
853 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5)
854 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg5>>
855 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, bound_.invoke(), _A_arg5);
858 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
859 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5>
860 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>::type
861 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5)
862 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg5>>
863 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, bound_.invoke(), _A_arg5);
867 /** Invokes the wrapped functor passing on the arguments.
868 * bound_ is passed as the 5th argument.
869 * @param _A_arg1 Argument to be passed on to the functor.
870 * @param _A_arg2 Argument to be passed on to the functor.
871 * @param _A_arg3 Argument to be passed on to the functor.
872 * @param _A_arg4 Argument to be passed on to the functor.
873 * @param _A_arg5 Argument to be passed on to the functor.
874 * @param _A_arg6 Argument to be passed on to the functor.
875 * @return The return value of the functor invocation.
877 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6>
878 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>::type
879 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5, T_arg6 _A_arg6)
880 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg5>, type_trait_pass_t<T_arg6>>
881 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, bound_.invoke(), _A_arg5, _A_arg6);
884 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
885 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6>
886 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>::type
887 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5, T_arg6 _A_arg6)
888 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg5>, type_trait_pass_t<T_arg6>>
889 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, bound_.invoke(), _A_arg5, _A_arg6);
893 /** Constructs a bind_functor object that binds an argument to the passed functor.
894 * @param _A_func Functor to invoke from operator()().
895 * @param _A_bound Argument to bind to the functor.
897 bind_functor(type_trait_take_t<T_functor> _A_func, type_trait_take_t<T_bound> _A_bound)
898 : adapts<T_functor>(_A_func), bound_(_A_bound)
901 /// The argument bound to the functor.
902 bound_argument<T_bound> bound_;
905 /** Adaptor that binds an argument to the wrapped functor.
906 * This template specialization fixes the 6th argument of the wrapped functor.
910 template <class T_functor, class T_bound>
911 struct bind_functor<5, T_functor, T_bound, nil, nil, nil, nil, nil, nil> : public adapts<T_functor>
913 typedef typename adapts<T_functor>::adaptor_type adaptor_type;
915 template <class T_arg1=void, class T_arg2=void, class T_arg3=void, class T_arg4=void, class T_arg5=void, class T_arg6=void, class T_arg7=void>
916 struct deduce_result_type
917 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg6>>::type type; };
918 typedef typename adaptor_type::result_type result_type;
920 /** Invokes the wrapped functor passing on the bound argument only.
921 * @return The return value of the functor invocation.
926 //Note: The AIX compiler sometimes gives linker errors if we do not define this in the class.
927 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_bound>::type>> (bound_.invoke());
930 /** Invokes the wrapped functor passing on the arguments.
931 * bound_ is passed as the 6th argument.
932 * @param _A_arg1 Argument to be passed on to the functor.
933 * @param _A_arg2 Argument to be passed on to the functor.
934 * @param _A_arg3 Argument to be passed on to the functor.
935 * @param _A_arg4 Argument to be passed on to the functor.
936 * @param _A_arg5 Argument to be passed on to the functor.
937 * @return The return value of the functor invocation.
939 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5>
940 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>::type
941 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5)
942 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>>
943 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5, bound_.invoke());
946 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
947 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5>
948 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>::type
949 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5)
950 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>>
951 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5, bound_.invoke());
955 /** Invokes the wrapped functor passing on the arguments.
956 * bound_ is passed as the 6th argument.
957 * @param _A_arg1 Argument to be passed on to the functor.
958 * @param _A_arg2 Argument to be passed on to the functor.
959 * @param _A_arg3 Argument to be passed on to the functor.
960 * @param _A_arg4 Argument to be passed on to the functor.
961 * @param _A_arg5 Argument to be passed on to the functor.
962 * @param _A_arg6 Argument to be passed on to the functor.
963 * @return The return value of the functor invocation.
965 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6>
966 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>::type
967 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5, T_arg6 _A_arg6)
968 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg6>>
969 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5, bound_.invoke(), _A_arg6);
972 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
973 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6>
974 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>::type
975 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5, T_arg6 _A_arg6)
976 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>, type_trait_pass_t<T_arg6>>
977 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5, bound_.invoke(), _A_arg6);
981 /** Constructs a bind_functor object that binds an argument to the passed functor.
982 * @param _A_func Functor to invoke from operator()().
983 * @param _A_bound Argument to bind to the functor.
985 bind_functor(type_trait_take_t<T_functor> _A_func, type_trait_take_t<T_bound> _A_bound)
986 : adapts<T_functor>(_A_func), bound_(_A_bound)
989 /// The argument bound to the functor.
990 bound_argument<T_bound> bound_;
993 /** Adaptor that binds an argument to the wrapped functor.
994 * This template specialization fixes the 7th argument of the wrapped functor.
998 template <class T_functor, class T_bound>
999 struct bind_functor<6, T_functor, T_bound, nil, nil, nil, nil, nil, nil> : public adapts<T_functor>
1001 typedef typename adapts<T_functor>::adaptor_type adaptor_type;
1003 template <class T_arg1=void, class T_arg2=void, class T_arg3=void, class T_arg4=void, class T_arg5=void, class T_arg6=void, class T_arg7=void>
1004 struct deduce_result_type
1005 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<T_arg6>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>>::type type; };
1006 typedef typename adaptor_type::result_type result_type;
1008 /** Invokes the wrapped functor passing on the bound argument only.
1009 * @return The return value of the functor invocation.
1014 //Note: The AIX compiler sometimes gives linker errors if we do not define this in the class.
1015 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_bound>::type>> (bound_.invoke());
1018 /** Invokes the wrapped functor passing on the arguments.
1019 * bound_ is passed as the 7th argument.
1020 * @param _A_arg1 Argument to be passed on to the functor.
1021 * @param _A_arg2 Argument to be passed on to the functor.
1022 * @param _A_arg3 Argument to be passed on to the functor.
1023 * @param _A_arg4 Argument to be passed on to the functor.
1024 * @param _A_arg5 Argument to be passed on to the functor.
1025 * @param _A_arg6 Argument to be passed on to the functor.
1026 * @return The return value of the functor invocation.
1028 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6>
1029 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>::type
1030 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5, T_arg6 _A_arg6)
1031 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<T_arg6>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>>
1032 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5, _A_arg6, bound_.invoke());
1035 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
1036 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6>
1037 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>::type
1038 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5, T_arg6 _A_arg6)
1039 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<T_arg6>, type_trait_pass_t<typename unwrap_reference<T_bound>::type>>
1040 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5, _A_arg6, bound_.invoke());
1044 /** Constructs a bind_functor object that binds an argument to the passed functor.
1045 * @param _A_func Functor to invoke from operator()().
1046 * @param _A_bound Argument to bind to the functor.
1048 bind_functor(type_trait_take_t<T_functor> _A_func, type_trait_take_t<T_bound> _A_bound)
1049 : adapts<T_functor>(_A_func), bound_(_A_bound)
1052 /// The argument bound to the functor.
1053 bound_argument<T_bound> bound_;
1055 #endif // DOXYGEN_SHOULD_SKIP_THIS
1058 #ifndef DOXYGEN_SHOULD_SKIP_THIS
1059 //template specialization of visitor<>::do_visit_each<>(action, functor):
1060 /** Performs a functor on each of the targets of a functor.
1061 * The function overload for sigc::bind_functor performs a functor on the
1062 * functor and on the object instances stored in the sigc::bind_functor object.
1066 template <int T_loc, class T_functor, class T_bound>
1067 struct visitor<bind_functor<T_loc, T_functor, T_bound> >
1069 template <class T_action>
1070 static void do_visit_each(const T_action& _A_action,
1071 const bind_functor<T_loc, T_functor, T_bound>& _A_target)
1073 sigc::visit_each(_A_action, _A_target.functor_);
1074 sigc::visit_each(_A_action, _A_target.bound_);
1077 #endif // DOXYGEN_SHOULD_SKIP_THIS
1079 /** Adaptor that binds 1 argument(s) to the wrapped functor.
1080 * This template specialization fixes the last 1 argument(s) of the wrapped functor.
1084 template <class T_functor, class T_type1>
1085 struct bind_functor<-1, T_functor, T_type1, nil, nil, nil, nil, nil, nil> : public adapts<T_functor>
1087 typedef typename adapts<T_functor>::adaptor_type adaptor_type;
1089 #ifndef DOXYGEN_SHOULD_SKIP_THIS
1090 template <int count, class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6, class T_arg7>
1091 struct deduce_result_type_internal
1092 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<T_arg6>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>>::type type; };
1093 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6, class T_arg7>
1094 struct deduce_result_type_internal<2, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>
1095 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>>::type type; };
1096 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6, class T_arg7>
1097 struct deduce_result_type_internal<3, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>
1098 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>>::type type; };
1099 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6, class T_arg7>
1100 struct deduce_result_type_internal<4, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>
1101 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>>::type type; };
1102 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6, class T_arg7>
1103 struct deduce_result_type_internal<5, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>
1104 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>>::type type; };
1105 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6, class T_arg7>
1106 struct deduce_result_type_internal<6, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>
1107 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>>::type type; };
1109 template <class T_arg1=void, class T_arg2=void, class T_arg3=void, class T_arg4=void, class T_arg5=void, class T_arg6=void, class T_arg7=void>
1110 struct deduce_result_type {
1111 typedef typename deduce_result_type_internal<internal::count_void<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>::value,
1112 T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>::type type;
1114 #endif // DOXYGEN_SHOULD_SKIP_THIS
1115 typedef typename adaptor_type::result_type result_type;
1117 /** Invokes the wrapped functor passing on the bound argument only.
1118 * @return The return value of the functor invocation.
1123 //Note: The AIX compiler sometimes gives linker errors if we do not define this in the class.
1124 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_type1>::type>> (bound1_.invoke());
1127 /** Invokes the wrapped functor passing on the arguments.
1128 * The last 1 argument(s) are fixed.
1129 * @param _A_arg1 Argument to be passed on to the functor.
1130 * @return The return value of the functor invocation.
1132 template <class T_arg1>
1133 typename deduce_result_type<T_arg1>::type
1134 operator()(T_arg1 _A_arg1)
1135 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>>
1136 (_A_arg1, bound1_.invoke());
1139 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
1140 template <class T_arg1>
1141 typename deduce_result_type<T_arg1>::type
1142 sun_forte_workaround(T_arg1 _A_arg1)
1143 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>>
1144 (_A_arg1, bound1_.invoke());
1148 /** Invokes the wrapped functor passing on the arguments.
1149 * The last 1 argument(s) are fixed.
1150 * @param _A_arg1 Argument to be passed on to the functor.
1151 * @param _A_arg2 Argument to be passed on to the functor.
1152 * @return The return value of the functor invocation.
1154 template <class T_arg1, class T_arg2>
1155 typename deduce_result_type<T_arg1, T_arg2>::type
1156 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2)
1157 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>>
1158 (_A_arg1, _A_arg2, bound1_.invoke());
1161 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
1162 template <class T_arg1, class T_arg2>
1163 typename deduce_result_type<T_arg1, T_arg2>::type
1164 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2)
1165 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>>
1166 (_A_arg1, _A_arg2, bound1_.invoke());
1170 /** Invokes the wrapped functor passing on the arguments.
1171 * The last 1 argument(s) are fixed.
1172 * @param _A_arg1 Argument to be passed on to the functor.
1173 * @param _A_arg2 Argument to be passed on to the functor.
1174 * @param _A_arg3 Argument to be passed on to the functor.
1175 * @return The return value of the functor invocation.
1177 template <class T_arg1, class T_arg2, class T_arg3>
1178 typename deduce_result_type<T_arg1, T_arg2, T_arg3>::type
1179 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3)
1180 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>>
1181 (_A_arg1, _A_arg2, _A_arg3, bound1_.invoke());
1184 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
1185 template <class T_arg1, class T_arg2, class T_arg3>
1186 typename deduce_result_type<T_arg1, T_arg2, T_arg3>::type
1187 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3)
1188 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>>
1189 (_A_arg1, _A_arg2, _A_arg3, bound1_.invoke());
1193 /** Invokes the wrapped functor passing on the arguments.
1194 * The last 1 argument(s) are fixed.
1195 * @param _A_arg1 Argument to be passed on to the functor.
1196 * @param _A_arg2 Argument to be passed on to the functor.
1197 * @param _A_arg3 Argument to be passed on to the functor.
1198 * @param _A_arg4 Argument to be passed on to the functor.
1199 * @return The return value of the functor invocation.
1201 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4>
1202 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4>::type
1203 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4)
1204 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>>
1205 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, bound1_.invoke());
1208 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
1209 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4>
1210 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4>::type
1211 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4)
1212 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>>
1213 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, bound1_.invoke());
1217 /** Invokes the wrapped functor passing on the arguments.
1218 * The last 1 argument(s) are fixed.
1219 * @param _A_arg1 Argument to be passed on to the functor.
1220 * @param _A_arg2 Argument to be passed on to the functor.
1221 * @param _A_arg3 Argument to be passed on to the functor.
1222 * @param _A_arg4 Argument to be passed on to the functor.
1223 * @param _A_arg5 Argument to be passed on to the functor.
1224 * @return The return value of the functor invocation.
1226 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5>
1227 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>::type
1228 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5)
1229 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>>
1230 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5, bound1_.invoke());
1233 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
1234 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5>
1235 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>::type
1236 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5)
1237 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>>
1238 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5, bound1_.invoke());
1242 /** Invokes the wrapped functor passing on the arguments.
1243 * The last 1 argument(s) are fixed.
1244 * @param _A_arg1 Argument to be passed on to the functor.
1245 * @param _A_arg2 Argument to be passed on to the functor.
1246 * @param _A_arg3 Argument to be passed on to the functor.
1247 * @param _A_arg4 Argument to be passed on to the functor.
1248 * @param _A_arg5 Argument to be passed on to the functor.
1249 * @param _A_arg6 Argument to be passed on to the functor.
1250 * @return The return value of the functor invocation.
1252 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6>
1253 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>::type
1254 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5, T_arg6 _A_arg6)
1255 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<T_arg6>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>>
1256 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5, _A_arg6, bound1_.invoke());
1259 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
1260 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6>
1261 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>::type
1262 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5, T_arg6 _A_arg6)
1263 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<T_arg6>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>>
1264 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5, _A_arg6, bound1_.invoke());
1268 /** Constructs a bind_functor object that binds an argument to the passed functor.
1269 * @param _A_func Functor to invoke from operator()().
1270 * @param _A_bound1 Argument to bind to the functor.
1272 bind_functor(type_trait_take_t<T_functor> _A_func, type_trait_take_t<T_type1> _A_bound1)
1273 : adapts<T_functor>(_A_func), bound1_(_A_bound1)
1276 /// The argument bound to the functor.
1277 bound_argument<T_type1> bound1_;
1280 #ifndef DOXYGEN_SHOULD_SKIP_THIS
1281 //template specialization of visitor<>::do_visit_each<>(action, functor):
1282 /** Performs a functor on each of the targets of a functor.
1283 * The function overload for sigc::bind_functor performs a functor on the
1284 * functor and on the object instances stored in the sigc::bind_functor object.
1288 template <class T_functor, class T_type1>
1289 struct visitor<bind_functor<-1, T_functor, T_type1> >
1291 template <typename T_action>
1292 static void do_visit_each(const T_action& _A_action,
1293 const bind_functor<-1, T_functor, T_type1>& _A_target)
1295 sigc::visit_each(_A_action, _A_target.functor_);
1296 sigc::visit_each(_A_action, _A_target.bound1_);
1300 /** Adaptor that binds 2 argument(s) to the wrapped functor.
1301 * This template specialization fixes the last 2 argument(s) of the wrapped functor.
1305 template <class T_functor, class T_type1, class T_type2>
1306 struct bind_functor<-1, T_functor, T_type1, T_type2, nil, nil, nil, nil, nil> : public adapts<T_functor>
1308 typedef typename adapts<T_functor>::adaptor_type adaptor_type;
1310 template <int count, class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6, class T_arg7>
1311 struct deduce_result_type_internal
1312 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>>::type type; };
1313 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6, class T_arg7>
1314 struct deduce_result_type_internal<3, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>
1315 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>>::type type; };
1316 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6, class T_arg7>
1317 struct deduce_result_type_internal<4, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>
1318 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>>::type type; };
1319 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6, class T_arg7>
1320 struct deduce_result_type_internal<5, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>
1321 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>>::type type; };
1322 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6, class T_arg7>
1323 struct deduce_result_type_internal<6, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>
1324 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>>::type type; };
1326 template <class T_arg1=void, class T_arg2=void, class T_arg3=void, class T_arg4=void, class T_arg5=void, class T_arg6=void, class T_arg7=void>
1327 struct deduce_result_type {
1328 typedef typename deduce_result_type_internal<internal::count_void<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>::value,
1329 T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>::type type;
1331 typedef typename adaptor_type::result_type result_type;
1333 /** Invokes the wrapped functor passing on the bound argument only.
1334 * @return The return value of the functor invocation.
1339 //Note: The AIX compiler sometimes gives linker errors if we do not define this in the class.
1340 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>> (bound1_.invoke(), bound2_.invoke());
1343 /** Invokes the wrapped functor passing on the arguments.
1344 * The last 2 argument(s) are fixed.
1345 * @param _A_arg1 Argument to be passed on to the functor.
1346 * @return The return value of the functor invocation.
1348 template <class T_arg1>
1349 typename deduce_result_type<T_arg1>::type
1350 operator()(T_arg1 _A_arg1)
1351 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>>
1352 (_A_arg1, bound1_.invoke(), bound2_.invoke());
1355 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
1356 template <class T_arg1>
1357 typename deduce_result_type<T_arg1>::type
1358 sun_forte_workaround(T_arg1 _A_arg1)
1359 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>>
1360 (_A_arg1, bound1_.invoke(), bound2_.invoke());
1364 /** Invokes the wrapped functor passing on the arguments.
1365 * The last 2 argument(s) are fixed.
1366 * @param _A_arg1 Argument to be passed on to the functor.
1367 * @param _A_arg2 Argument to be passed on to the functor.
1368 * @return The return value of the functor invocation.
1370 template <class T_arg1, class T_arg2>
1371 typename deduce_result_type<T_arg1, T_arg2>::type
1372 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2)
1373 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>>
1374 (_A_arg1, _A_arg2, bound1_.invoke(), bound2_.invoke());
1377 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
1378 template <class T_arg1, class T_arg2>
1379 typename deduce_result_type<T_arg1, T_arg2>::type
1380 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2)
1381 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>>
1382 (_A_arg1, _A_arg2, bound1_.invoke(), bound2_.invoke());
1386 /** Invokes the wrapped functor passing on the arguments.
1387 * The last 2 argument(s) are fixed.
1388 * @param _A_arg1 Argument to be passed on to the functor.
1389 * @param _A_arg2 Argument to be passed on to the functor.
1390 * @param _A_arg3 Argument to be passed on to the functor.
1391 * @return The return value of the functor invocation.
1393 template <class T_arg1, class T_arg2, class T_arg3>
1394 typename deduce_result_type<T_arg1, T_arg2, T_arg3>::type
1395 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3)
1396 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>>
1397 (_A_arg1, _A_arg2, _A_arg3, bound1_.invoke(), bound2_.invoke());
1400 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
1401 template <class T_arg1, class T_arg2, class T_arg3>
1402 typename deduce_result_type<T_arg1, T_arg2, T_arg3>::type
1403 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3)
1404 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>>
1405 (_A_arg1, _A_arg2, _A_arg3, bound1_.invoke(), bound2_.invoke());
1409 /** Invokes the wrapped functor passing on the arguments.
1410 * The last 2 argument(s) are fixed.
1411 * @param _A_arg1 Argument to be passed on to the functor.
1412 * @param _A_arg2 Argument to be passed on to the functor.
1413 * @param _A_arg3 Argument to be passed on to the functor.
1414 * @param _A_arg4 Argument to be passed on to the functor.
1415 * @return The return value of the functor invocation.
1417 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4>
1418 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4>::type
1419 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4)
1420 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>>
1421 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, bound1_.invoke(), bound2_.invoke());
1424 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
1425 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4>
1426 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4>::type
1427 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4)
1428 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>>
1429 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, bound1_.invoke(), bound2_.invoke());
1433 /** Invokes the wrapped functor passing on the arguments.
1434 * The last 2 argument(s) are fixed.
1435 * @param _A_arg1 Argument to be passed on to the functor.
1436 * @param _A_arg2 Argument to be passed on to the functor.
1437 * @param _A_arg3 Argument to be passed on to the functor.
1438 * @param _A_arg4 Argument to be passed on to the functor.
1439 * @param _A_arg5 Argument to be passed on to the functor.
1440 * @return The return value of the functor invocation.
1442 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5>
1443 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>::type
1444 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5)
1445 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>>
1446 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5, bound1_.invoke(), bound2_.invoke());
1449 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
1450 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5>
1451 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>::type
1452 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4, T_arg5 _A_arg5)
1453 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<T_arg5>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>>
1454 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5, bound1_.invoke(), bound2_.invoke());
1458 /** Constructs a bind_functor object that binds an argument to the passed functor.
1459 * @param _A_func Functor to invoke from operator()().
1460 * @param _A_bound1 Argument to bind to the functor.
1461 * @param _A_bound2 Argument to bind to the functor.
1463 bind_functor(type_trait_take_t<T_functor> _A_func, type_trait_take_t<T_type1> _A_bound1, type_trait_take_t<T_type2> _A_bound2)
1464 : adapts<T_functor>(_A_func), bound1_(_A_bound1), bound2_(_A_bound2)
1467 /// The argument bound to the functor.
1468 bound_argument<T_type1> bound1_;
1469 bound_argument<T_type2> bound2_;
1472 //template specialization of visitor<>::do_visit_each<>(action, functor):
1473 /** Performs a functor on each of the targets of a functor.
1474 * The function overload for sigc::bind_functor performs a functor on the
1475 * functor and on the object instances stored in the sigc::bind_functor object.
1479 template <class T_functor, class T_type1, class T_type2>
1480 struct visitor<bind_functor<-1, T_functor, T_type1, T_type2> >
1482 template <typename T_action>
1483 static void do_visit_each(const T_action& _A_action,
1484 const bind_functor<-1, T_functor, T_type1, T_type2>& _A_target)
1486 sigc::visit_each(_A_action, _A_target.functor_);
1487 sigc::visit_each(_A_action, _A_target.bound1_);
1488 sigc::visit_each(_A_action, _A_target.bound2_);
1492 /** Adaptor that binds 3 argument(s) to the wrapped functor.
1493 * This template specialization fixes the last 3 argument(s) of the wrapped functor.
1497 template <class T_functor, class T_type1, class T_type2, class T_type3>
1498 struct bind_functor<-1, T_functor, T_type1, T_type2, T_type3, nil, nil, nil, nil> : public adapts<T_functor>
1500 typedef typename adapts<T_functor>::adaptor_type adaptor_type;
1502 template <int count, class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6, class T_arg7>
1503 struct deduce_result_type_internal
1504 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>>::type type; };
1505 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6, class T_arg7>
1506 struct deduce_result_type_internal<4, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>
1507 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>>::type type; };
1508 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6, class T_arg7>
1509 struct deduce_result_type_internal<5, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>
1510 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>>::type type; };
1511 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6, class T_arg7>
1512 struct deduce_result_type_internal<6, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>
1513 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>>::type type; };
1515 template <class T_arg1=void, class T_arg2=void, class T_arg3=void, class T_arg4=void, class T_arg5=void, class T_arg6=void, class T_arg7=void>
1516 struct deduce_result_type {
1517 typedef typename deduce_result_type_internal<internal::count_void<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>::value,
1518 T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>::type type;
1520 typedef typename adaptor_type::result_type result_type;
1522 /** Invokes the wrapped functor passing on the bound argument only.
1523 * @return The return value of the functor invocation.
1528 //Note: The AIX compiler sometimes gives linker errors if we do not define this in the class.
1529 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>> (bound1_.invoke(), bound2_.invoke(), bound3_.invoke());
1532 /** Invokes the wrapped functor passing on the arguments.
1533 * The last 3 argument(s) are fixed.
1534 * @param _A_arg1 Argument to be passed on to the functor.
1535 * @return The return value of the functor invocation.
1537 template <class T_arg1>
1538 typename deduce_result_type<T_arg1>::type
1539 operator()(T_arg1 _A_arg1)
1540 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>>
1541 (_A_arg1, bound1_.invoke(), bound2_.invoke(), bound3_.invoke());
1544 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
1545 template <class T_arg1>
1546 typename deduce_result_type<T_arg1>::type
1547 sun_forte_workaround(T_arg1 _A_arg1)
1548 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>>
1549 (_A_arg1, bound1_.invoke(), bound2_.invoke(), bound3_.invoke());
1553 /** Invokes the wrapped functor passing on the arguments.
1554 * The last 3 argument(s) are fixed.
1555 * @param _A_arg1 Argument to be passed on to the functor.
1556 * @param _A_arg2 Argument to be passed on to the functor.
1557 * @return The return value of the functor invocation.
1559 template <class T_arg1, class T_arg2>
1560 typename deduce_result_type<T_arg1, T_arg2>::type
1561 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2)
1562 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>>
1563 (_A_arg1, _A_arg2, bound1_.invoke(), bound2_.invoke(), bound3_.invoke());
1566 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
1567 template <class T_arg1, class T_arg2>
1568 typename deduce_result_type<T_arg1, T_arg2>::type
1569 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2)
1570 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>>
1571 (_A_arg1, _A_arg2, bound1_.invoke(), bound2_.invoke(), bound3_.invoke());
1575 /** Invokes the wrapped functor passing on the arguments.
1576 * The last 3 argument(s) are fixed.
1577 * @param _A_arg1 Argument to be passed on to the functor.
1578 * @param _A_arg2 Argument to be passed on to the functor.
1579 * @param _A_arg3 Argument to be passed on to the functor.
1580 * @return The return value of the functor invocation.
1582 template <class T_arg1, class T_arg2, class T_arg3>
1583 typename deduce_result_type<T_arg1, T_arg2, T_arg3>::type
1584 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3)
1585 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>>
1586 (_A_arg1, _A_arg2, _A_arg3, bound1_.invoke(), bound2_.invoke(), bound3_.invoke());
1589 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
1590 template <class T_arg1, class T_arg2, class T_arg3>
1591 typename deduce_result_type<T_arg1, T_arg2, T_arg3>::type
1592 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3)
1593 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>>
1594 (_A_arg1, _A_arg2, _A_arg3, bound1_.invoke(), bound2_.invoke(), bound3_.invoke());
1598 /** Invokes the wrapped functor passing on the arguments.
1599 * The last 3 argument(s) are fixed.
1600 * @param _A_arg1 Argument to be passed on to the functor.
1601 * @param _A_arg2 Argument to be passed on to the functor.
1602 * @param _A_arg3 Argument to be passed on to the functor.
1603 * @param _A_arg4 Argument to be passed on to the functor.
1604 * @return The return value of the functor invocation.
1606 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4>
1607 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4>::type
1608 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4)
1609 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>>
1610 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, bound1_.invoke(), bound2_.invoke(), bound3_.invoke());
1613 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
1614 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4>
1615 typename deduce_result_type<T_arg1, T_arg2, T_arg3, T_arg4>::type
1616 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3, T_arg4 _A_arg4)
1617 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<T_arg4>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>>
1618 (_A_arg1, _A_arg2, _A_arg3, _A_arg4, bound1_.invoke(), bound2_.invoke(), bound3_.invoke());
1622 /** Constructs a bind_functor object that binds an argument to the passed functor.
1623 * @param _A_func Functor to invoke from operator()().
1624 * @param _A_bound1 Argument to bind to the functor.
1625 * @param _A_bound2 Argument to bind to the functor.
1626 * @param _A_bound3 Argument to bind to the functor.
1628 bind_functor(type_trait_take_t<T_functor> _A_func, type_trait_take_t<T_type1> _A_bound1, type_trait_take_t<T_type2> _A_bound2, type_trait_take_t<T_type3> _A_bound3)
1629 : adapts<T_functor>(_A_func), bound1_(_A_bound1), bound2_(_A_bound2), bound3_(_A_bound3)
1632 /// The argument bound to the functor.
1633 bound_argument<T_type1> bound1_;
1634 bound_argument<T_type2> bound2_;
1635 bound_argument<T_type3> bound3_;
1638 //template specialization of visitor<>::do_visit_each<>(action, functor):
1639 /** Performs a functor on each of the targets of a functor.
1640 * The function overload for sigc::bind_functor performs a functor on the
1641 * functor and on the object instances stored in the sigc::bind_functor object.
1645 template <class T_functor, class T_type1, class T_type2, class T_type3>
1646 struct visitor<bind_functor<-1, T_functor, T_type1, T_type2, T_type3> >
1648 template <typename T_action>
1649 static void do_visit_each(const T_action& _A_action,
1650 const bind_functor<-1, T_functor, T_type1, T_type2, T_type3>& _A_target)
1652 sigc::visit_each(_A_action, _A_target.functor_);
1653 sigc::visit_each(_A_action, _A_target.bound1_);
1654 sigc::visit_each(_A_action, _A_target.bound2_);
1655 sigc::visit_each(_A_action, _A_target.bound3_);
1659 /** Adaptor that binds 4 argument(s) to the wrapped functor.
1660 * This template specialization fixes the last 4 argument(s) of the wrapped functor.
1664 template <class T_functor, class T_type1, class T_type2, class T_type3, class T_type4>
1665 struct bind_functor<-1, T_functor, T_type1, T_type2, T_type3, T_type4, nil, nil, nil> : public adapts<T_functor>
1667 typedef typename adapts<T_functor>::adaptor_type adaptor_type;
1669 template <int count, class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6, class T_arg7>
1670 struct deduce_result_type_internal
1671 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>>::type type; };
1672 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6, class T_arg7>
1673 struct deduce_result_type_internal<5, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>
1674 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>>::type type; };
1675 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6, class T_arg7>
1676 struct deduce_result_type_internal<6, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>
1677 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>>::type type; };
1679 template <class T_arg1=void, class T_arg2=void, class T_arg3=void, class T_arg4=void, class T_arg5=void, class T_arg6=void, class T_arg7=void>
1680 struct deduce_result_type {
1681 typedef typename deduce_result_type_internal<internal::count_void<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>::value,
1682 T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>::type type;
1684 typedef typename adaptor_type::result_type result_type;
1686 /** Invokes the wrapped functor passing on the bound argument only.
1687 * @return The return value of the functor invocation.
1692 //Note: The AIX compiler sometimes gives linker errors if we do not define this in the class.
1693 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>> (bound1_.invoke(), bound2_.invoke(), bound3_.invoke(), bound4_.invoke());
1696 /** Invokes the wrapped functor passing on the arguments.
1697 * The last 4 argument(s) are fixed.
1698 * @param _A_arg1 Argument to be passed on to the functor.
1699 * @return The return value of the functor invocation.
1701 template <class T_arg1>
1702 typename deduce_result_type<T_arg1>::type
1703 operator()(T_arg1 _A_arg1)
1704 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>>
1705 (_A_arg1, bound1_.invoke(), bound2_.invoke(), bound3_.invoke(), bound4_.invoke());
1708 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
1709 template <class T_arg1>
1710 typename deduce_result_type<T_arg1>::type
1711 sun_forte_workaround(T_arg1 _A_arg1)
1712 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>>
1713 (_A_arg1, bound1_.invoke(), bound2_.invoke(), bound3_.invoke(), bound4_.invoke());
1717 /** Invokes the wrapped functor passing on the arguments.
1718 * The last 4 argument(s) are fixed.
1719 * @param _A_arg1 Argument to be passed on to the functor.
1720 * @param _A_arg2 Argument to be passed on to the functor.
1721 * @return The return value of the functor invocation.
1723 template <class T_arg1, class T_arg2>
1724 typename deduce_result_type<T_arg1, T_arg2>::type
1725 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2)
1726 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>>
1727 (_A_arg1, _A_arg2, bound1_.invoke(), bound2_.invoke(), bound3_.invoke(), bound4_.invoke());
1730 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
1731 template <class T_arg1, class T_arg2>
1732 typename deduce_result_type<T_arg1, T_arg2>::type
1733 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2)
1734 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>>
1735 (_A_arg1, _A_arg2, bound1_.invoke(), bound2_.invoke(), bound3_.invoke(), bound4_.invoke());
1739 /** Invokes the wrapped functor passing on the arguments.
1740 * The last 4 argument(s) are fixed.
1741 * @param _A_arg1 Argument to be passed on to the functor.
1742 * @param _A_arg2 Argument to be passed on to the functor.
1743 * @param _A_arg3 Argument to be passed on to the functor.
1744 * @return The return value of the functor invocation.
1746 template <class T_arg1, class T_arg2, class T_arg3>
1747 typename deduce_result_type<T_arg1, T_arg2, T_arg3>::type
1748 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3)
1749 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>>
1750 (_A_arg1, _A_arg2, _A_arg3, bound1_.invoke(), bound2_.invoke(), bound3_.invoke(), bound4_.invoke());
1753 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
1754 template <class T_arg1, class T_arg2, class T_arg3>
1755 typename deduce_result_type<T_arg1, T_arg2, T_arg3>::type
1756 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2, T_arg3 _A_arg3)
1757 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<T_arg3>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>>
1758 (_A_arg1, _A_arg2, _A_arg3, bound1_.invoke(), bound2_.invoke(), bound3_.invoke(), bound4_.invoke());
1762 /** Constructs a bind_functor object that binds an argument to the passed functor.
1763 * @param _A_func Functor to invoke from operator()().
1764 * @param _A_bound1 Argument to bind to the functor.
1765 * @param _A_bound2 Argument to bind to the functor.
1766 * @param _A_bound3 Argument to bind to the functor.
1767 * @param _A_bound4 Argument to bind to the functor.
1769 bind_functor(type_trait_take_t<T_functor> _A_func, type_trait_take_t<T_type1> _A_bound1, type_trait_take_t<T_type2> _A_bound2, type_trait_take_t<T_type3> _A_bound3, type_trait_take_t<T_type4> _A_bound4)
1770 : adapts<T_functor>(_A_func), bound1_(_A_bound1), bound2_(_A_bound2), bound3_(_A_bound3), bound4_(_A_bound4)
1773 /// The argument bound to the functor.
1774 bound_argument<T_type1> bound1_;
1775 bound_argument<T_type2> bound2_;
1776 bound_argument<T_type3> bound3_;
1777 bound_argument<T_type4> bound4_;
1780 //template specialization of visitor<>::do_visit_each<>(action, functor):
1781 /** Performs a functor on each of the targets of a functor.
1782 * The function overload for sigc::bind_functor performs a functor on the
1783 * functor and on the object instances stored in the sigc::bind_functor object.
1787 template <class T_functor, class T_type1, class T_type2, class T_type3, class T_type4>
1788 struct visitor<bind_functor<-1, T_functor, T_type1, T_type2, T_type3, T_type4> >
1790 template <typename T_action>
1791 static void do_visit_each(const T_action& _A_action,
1792 const bind_functor<-1, T_functor, T_type1, T_type2, T_type3, T_type4>& _A_target)
1794 sigc::visit_each(_A_action, _A_target.functor_);
1795 sigc::visit_each(_A_action, _A_target.bound1_);
1796 sigc::visit_each(_A_action, _A_target.bound2_);
1797 sigc::visit_each(_A_action, _A_target.bound3_);
1798 sigc::visit_each(_A_action, _A_target.bound4_);
1802 /** Adaptor that binds 5 argument(s) to the wrapped functor.
1803 * This template specialization fixes the last 5 argument(s) of the wrapped functor.
1807 template <class T_functor, class T_type1, class T_type2, class T_type3, class T_type4, class T_type5>
1808 struct bind_functor<-1, T_functor, T_type1, T_type2, T_type3, T_type4, T_type5, nil, nil> : public adapts<T_functor>
1810 typedef typename adapts<T_functor>::adaptor_type adaptor_type;
1812 template <int count, class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6, class T_arg7>
1813 struct deduce_result_type_internal
1814 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>, type_trait_pass_t<typename unwrap_reference<T_type5>::type>>::type type; };
1815 template <class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6, class T_arg7>
1816 struct deduce_result_type_internal<6, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>
1817 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>, type_trait_pass_t<typename unwrap_reference<T_type5>::type>>::type type; };
1819 template <class T_arg1=void, class T_arg2=void, class T_arg3=void, class T_arg4=void, class T_arg5=void, class T_arg6=void, class T_arg7=void>
1820 struct deduce_result_type {
1821 typedef typename deduce_result_type_internal<internal::count_void<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>::value,
1822 T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>::type type;
1824 typedef typename adaptor_type::result_type result_type;
1826 /** Invokes the wrapped functor passing on the bound argument only.
1827 * @return The return value of the functor invocation.
1832 //Note: The AIX compiler sometimes gives linker errors if we do not define this in the class.
1833 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>, type_trait_pass_t<typename unwrap_reference<T_type5>::type>> (bound1_.invoke(), bound2_.invoke(), bound3_.invoke(), bound4_.invoke(), bound5_.invoke());
1836 /** Invokes the wrapped functor passing on the arguments.
1837 * The last 5 argument(s) are fixed.
1838 * @param _A_arg1 Argument to be passed on to the functor.
1839 * @return The return value of the functor invocation.
1841 template <class T_arg1>
1842 typename deduce_result_type<T_arg1>::type
1843 operator()(T_arg1 _A_arg1)
1844 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>, type_trait_pass_t<typename unwrap_reference<T_type5>::type>>
1845 (_A_arg1, bound1_.invoke(), bound2_.invoke(), bound3_.invoke(), bound4_.invoke(), bound5_.invoke());
1848 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
1849 template <class T_arg1>
1850 typename deduce_result_type<T_arg1>::type
1851 sun_forte_workaround(T_arg1 _A_arg1)
1852 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>, type_trait_pass_t<typename unwrap_reference<T_type5>::type>>
1853 (_A_arg1, bound1_.invoke(), bound2_.invoke(), bound3_.invoke(), bound4_.invoke(), bound5_.invoke());
1857 /** Invokes the wrapped functor passing on the arguments.
1858 * The last 5 argument(s) are fixed.
1859 * @param _A_arg1 Argument to be passed on to the functor.
1860 * @param _A_arg2 Argument to be passed on to the functor.
1861 * @return The return value of the functor invocation.
1863 template <class T_arg1, class T_arg2>
1864 typename deduce_result_type<T_arg1, T_arg2>::type
1865 operator()(T_arg1 _A_arg1, T_arg2 _A_arg2)
1866 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>, type_trait_pass_t<typename unwrap_reference<T_type5>::type>>
1867 (_A_arg1, _A_arg2, bound1_.invoke(), bound2_.invoke(), bound3_.invoke(), bound4_.invoke(), bound5_.invoke());
1870 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
1871 template <class T_arg1, class T_arg2>
1872 typename deduce_result_type<T_arg1, T_arg2>::type
1873 sun_forte_workaround(T_arg1 _A_arg1, T_arg2 _A_arg2)
1874 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<T_arg2>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>, type_trait_pass_t<typename unwrap_reference<T_type5>::type>>
1875 (_A_arg1, _A_arg2, bound1_.invoke(), bound2_.invoke(), bound3_.invoke(), bound4_.invoke(), bound5_.invoke());
1879 /** Constructs a bind_functor object that binds an argument to the passed functor.
1880 * @param _A_func Functor to invoke from operator()().
1881 * @param _A_bound1 Argument to bind to the functor.
1882 * @param _A_bound2 Argument to bind to the functor.
1883 * @param _A_bound3 Argument to bind to the functor.
1884 * @param _A_bound4 Argument to bind to the functor.
1885 * @param _A_bound5 Argument to bind to the functor.
1887 bind_functor(type_trait_take_t<T_functor> _A_func, type_trait_take_t<T_type1> _A_bound1, type_trait_take_t<T_type2> _A_bound2, type_trait_take_t<T_type3> _A_bound3, type_trait_take_t<T_type4> _A_bound4, type_trait_take_t<T_type5> _A_bound5)
1888 : adapts<T_functor>(_A_func), bound1_(_A_bound1), bound2_(_A_bound2), bound3_(_A_bound3), bound4_(_A_bound4), bound5_(_A_bound5)
1891 /// The argument bound to the functor.
1892 bound_argument<T_type1> bound1_;
1893 bound_argument<T_type2> bound2_;
1894 bound_argument<T_type3> bound3_;
1895 bound_argument<T_type4> bound4_;
1896 bound_argument<T_type5> bound5_;
1899 //template specialization of visitor<>::do_visit_each<>(action, functor):
1900 /** Performs a functor on each of the targets of a functor.
1901 * The function overload for sigc::bind_functor performs a functor on the
1902 * functor and on the object instances stored in the sigc::bind_functor object.
1906 template <class T_functor, class T_type1, class T_type2, class T_type3, class T_type4, class T_type5>
1907 struct visitor<bind_functor<-1, T_functor, T_type1, T_type2, T_type3, T_type4, T_type5> >
1909 template <typename T_action>
1910 static void do_visit_each(const T_action& _A_action,
1911 const bind_functor<-1, T_functor, T_type1, T_type2, T_type3, T_type4, T_type5>& _A_target)
1913 sigc::visit_each(_A_action, _A_target.functor_);
1914 sigc::visit_each(_A_action, _A_target.bound1_);
1915 sigc::visit_each(_A_action, _A_target.bound2_);
1916 sigc::visit_each(_A_action, _A_target.bound3_);
1917 sigc::visit_each(_A_action, _A_target.bound4_);
1918 sigc::visit_each(_A_action, _A_target.bound5_);
1922 /** Adaptor that binds 6 argument(s) to the wrapped functor.
1923 * This template specialization fixes the last 6 argument(s) of the wrapped functor.
1927 template <class T_functor, class T_type1, class T_type2, class T_type3, class T_type4, class T_type5, class T_type6>
1928 struct bind_functor<-1, T_functor, T_type1, T_type2, T_type3, T_type4, T_type5, T_type6, nil> : public adapts<T_functor>
1930 typedef typename adapts<T_functor>::adaptor_type adaptor_type;
1932 template <int count, class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6, class T_arg7>
1933 struct deduce_result_type_internal
1934 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>, type_trait_pass_t<typename unwrap_reference<T_type5>::type>, type_trait_pass_t<typename unwrap_reference<T_type6>::type>>::type type; };
1936 template <class T_arg1=void, class T_arg2=void, class T_arg3=void, class T_arg4=void, class T_arg5=void, class T_arg6=void, class T_arg7=void>
1937 struct deduce_result_type {
1938 typedef typename deduce_result_type_internal<internal::count_void<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>::value,
1939 T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>::type type;
1941 typedef typename adaptor_type::result_type result_type;
1943 /** Invokes the wrapped functor passing on the bound argument only.
1944 * @return The return value of the functor invocation.
1949 //Note: The AIX compiler sometimes gives linker errors if we do not define this in the class.
1950 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>, type_trait_pass_t<typename unwrap_reference<T_type5>::type>, type_trait_pass_t<typename unwrap_reference<T_type6>::type>> (bound1_.invoke(), bound2_.invoke(), bound3_.invoke(), bound4_.invoke(), bound5_.invoke(), bound6_.invoke());
1953 /** Invokes the wrapped functor passing on the arguments.
1954 * The last 6 argument(s) are fixed.
1955 * @param _A_arg1 Argument to be passed on to the functor.
1956 * @return The return value of the functor invocation.
1958 template <class T_arg1>
1959 typename deduce_result_type<T_arg1>::type
1960 operator()(T_arg1 _A_arg1)
1961 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>, type_trait_pass_t<typename unwrap_reference<T_type5>::type>, type_trait_pass_t<typename unwrap_reference<T_type6>::type>>
1962 (_A_arg1, bound1_.invoke(), bound2_.invoke(), bound3_.invoke(), bound4_.invoke(), bound5_.invoke(), bound6_.invoke());
1965 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
1966 template <class T_arg1>
1967 typename deduce_result_type<T_arg1>::type
1968 sun_forte_workaround(T_arg1 _A_arg1)
1969 { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<T_arg1>, type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>, type_trait_pass_t<typename unwrap_reference<T_type5>::type>, type_trait_pass_t<typename unwrap_reference<T_type6>::type>>
1970 (_A_arg1, bound1_.invoke(), bound2_.invoke(), bound3_.invoke(), bound4_.invoke(), bound5_.invoke(), bound6_.invoke());
1974 /** Constructs a bind_functor object that binds an argument to the passed functor.
1975 * @param _A_func Functor to invoke from operator()().
1976 * @param _A_bound1 Argument to bind to the functor.
1977 * @param _A_bound2 Argument to bind to the functor.
1978 * @param _A_bound3 Argument to bind to the functor.
1979 * @param _A_bound4 Argument to bind to the functor.
1980 * @param _A_bound5 Argument to bind to the functor.
1981 * @param _A_bound6 Argument to bind to the functor.
1983 bind_functor(type_trait_take_t<T_functor> _A_func, type_trait_take_t<T_type1> _A_bound1, type_trait_take_t<T_type2> _A_bound2, type_trait_take_t<T_type3> _A_bound3, type_trait_take_t<T_type4> _A_bound4, type_trait_take_t<T_type5> _A_bound5, type_trait_take_t<T_type6> _A_bound6)
1984 : adapts<T_functor>(_A_func), bound1_(_A_bound1), bound2_(_A_bound2), bound3_(_A_bound3), bound4_(_A_bound4), bound5_(_A_bound5), bound6_(_A_bound6)
1987 /// The argument bound to the functor.
1988 bound_argument<T_type1> bound1_;
1989 bound_argument<T_type2> bound2_;
1990 bound_argument<T_type3> bound3_;
1991 bound_argument<T_type4> bound4_;
1992 bound_argument<T_type5> bound5_;
1993 bound_argument<T_type6> bound6_;
1996 //template specialization of visitor<>::do_visit_each<>(action, functor):
1997 /** Performs a functor on each of the targets of a functor.
1998 * The function overload for sigc::bind_functor performs a functor on the
1999 * functor and on the object instances stored in the sigc::bind_functor object.
2003 template <class T_functor, class T_type1, class T_type2, class T_type3, class T_type4, class T_type5, class T_type6>
2004 struct visitor<bind_functor<-1, T_functor, T_type1, T_type2, T_type3, T_type4, T_type5, T_type6> >
2006 template <typename T_action>
2007 static void do_visit_each(const T_action& _A_action,
2008 const bind_functor<-1, T_functor, T_type1, T_type2, T_type3, T_type4, T_type5, T_type6>& _A_target)
2010 sigc::visit_each(_A_action, _A_target.functor_);
2011 sigc::visit_each(_A_action, _A_target.bound1_);
2012 sigc::visit_each(_A_action, _A_target.bound2_);
2013 sigc::visit_each(_A_action, _A_target.bound3_);
2014 sigc::visit_each(_A_action, _A_target.bound4_);
2015 sigc::visit_each(_A_action, _A_target.bound5_);
2016 sigc::visit_each(_A_action, _A_target.bound6_);
2020 /** Adaptor that binds 7 argument(s) to the wrapped functor.
2021 * This template specialization fixes the last 7 argument(s) of the wrapped functor.
2025 template <class T_functor, class T_type1, class T_type2, class T_type3, class T_type4, class T_type5, class T_type6, class T_type7>
2026 struct bind_functor<-1, T_functor, T_type1, T_type2, T_type3, T_type4, T_type5, T_type6, T_type7> : public adapts<T_functor>
2028 typedef typename adapts<T_functor>::adaptor_type adaptor_type;
2030 template <int count, class T_arg1, class T_arg2, class T_arg3, class T_arg4, class T_arg5, class T_arg6, class T_arg7>
2031 struct deduce_result_type_internal
2032 { typedef typename adaptor_type::template deduce_result_type<type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>, type_trait_pass_t<typename unwrap_reference<T_type5>::type>, type_trait_pass_t<typename unwrap_reference<T_type6>::type>, type_trait_pass_t<typename unwrap_reference<T_type7>::type>>::type type; };
2034 template <class T_arg1=void, class T_arg2=void, class T_arg3=void, class T_arg4=void, class T_arg5=void, class T_arg6=void, class T_arg7=void>
2035 struct deduce_result_type {
2036 typedef typename deduce_result_type_internal<internal::count_void<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>::value,
2037 T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>::type type;
2039 typedef typename adaptor_type::result_type result_type;
2041 /** Invokes the wrapped functor passing on the bound argument only.
2042 * @return The return value of the functor invocation.
2047 //Note: The AIX compiler sometimes gives linker errors if we do not define this in the class.
2048 return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<type_trait_pass_t<typename unwrap_reference<T_type1>::type>, type_trait_pass_t<typename unwrap_reference<T_type2>::type>, type_trait_pass_t<typename unwrap_reference<T_type3>::type>, type_trait_pass_t<typename unwrap_reference<T_type4>::type>, type_trait_pass_t<typename unwrap_reference<T_type5>::type>, type_trait_pass_t<typename unwrap_reference<T_type6>::type>, type_trait_pass_t<typename unwrap_reference<T_type7>::type>> (bound1_.invoke(), bound2_.invoke(), bound3_.invoke(), bound4_.invoke(), bound5_.invoke(), bound6_.invoke(), bound7_.invoke());
2051 /** Constructs a bind_functor object that binds an argument to the passed functor.
2052 * @param _A_func Functor to invoke from operator()().
2053 * @param _A_bound1 Argument to bind to the functor.
2054 * @param _A_bound2 Argument to bind to the functor.
2055 * @param _A_bound3 Argument to bind to the functor.
2056 * @param _A_bound4 Argument to bind to the functor.
2057 * @param _A_bound5 Argument to bind to the functor.
2058 * @param _A_bound6 Argument to bind to the functor.
2059 * @param _A_bound7 Argument to bind to the functor.
2061 bind_functor(type_trait_take_t<T_functor> _A_func, type_trait_take_t<T_type1> _A_bound1, type_trait_take_t<T_type2> _A_bound2, type_trait_take_t<T_type3> _A_bound3, type_trait_take_t<T_type4> _A_bound4, type_trait_take_t<T_type5> _A_bound5, type_trait_take_t<T_type6> _A_bound6, type_trait_take_t<T_type7> _A_bound7)
2062 : adapts<T_functor>(_A_func), bound1_(_A_bound1), bound2_(_A_bound2), bound3_(_A_bound3), bound4_(_A_bound4), bound5_(_A_bound5), bound6_(_A_bound6), bound7_(_A_bound7)
2065 /// The argument bound to the functor.
2066 bound_argument<T_type1> bound1_;
2067 bound_argument<T_type2> bound2_;
2068 bound_argument<T_type3> bound3_;
2069 bound_argument<T_type4> bound4_;
2070 bound_argument<T_type5> bound5_;
2071 bound_argument<T_type6> bound6_;
2072 bound_argument<T_type7> bound7_;
2075 //template specialization of visitor<>::do_visit_each<>(action, functor):
2076 /** Performs a functor on each of the targets of a functor.
2077 * The function overload for sigc::bind_functor performs a functor on the
2078 * functor and on the object instances stored in the sigc::bind_functor object.
2082 template <class T_functor, class T_type1, class T_type2, class T_type3, class T_type4, class T_type5, class T_type6, class T_type7>
2083 struct visitor<bind_functor<-1, T_functor, T_type1, T_type2, T_type3, T_type4, T_type5, T_type6, T_type7> >
2085 template <typename T_action>
2086 static void do_visit_each(const T_action& _A_action,
2087 const bind_functor<-1, T_functor, T_type1, T_type2, T_type3, T_type4, T_type5, T_type6, T_type7>& _A_target)
2089 sigc::visit_each(_A_action, _A_target.functor_);
2090 sigc::visit_each(_A_action, _A_target.bound1_);
2091 sigc::visit_each(_A_action, _A_target.bound2_);
2092 sigc::visit_each(_A_action, _A_target.bound3_);
2093 sigc::visit_each(_A_action, _A_target.bound4_);
2094 sigc::visit_each(_A_action, _A_target.bound5_);
2095 sigc::visit_each(_A_action, _A_target.bound6_);
2096 sigc::visit_each(_A_action, _A_target.bound7_);
2099 #endif // DOXYGEN_SHOULD_SKIP_THIS
2102 /** Creates an adaptor of type sigc::bind_functor which binds the passed argument to the passed functor.
2103 * The optional template argument @e I_location specifies the zero-based
2104 * position of the argument to be fixed (@p -1 stands for the last argument).
2106 * @param _A_func Functor that should be wrapped.
2107 * @param _A_b1 Argument to bind to @e _A_func.
2108 * @return Adaptor that executes @e _A_func with the bound argument on invokation.
2112 template <int I_location, class T_bound1, class T_functor>
2113 inline bind_functor<I_location, T_functor, T_bound1>
2114 bind(const T_functor& _A_func, T_bound1 _A_b1)
2116 return bind_functor<I_location, T_functor, T_bound1>
2120 /** Creates an adaptor of type sigc::bind_functor which fixes the last 1 argument(s) of the passed functor.
2121 * This function overload fixes the last 1 argument(s) of @e _A_func.
2123 * @param _A_func Functor that should be wrapped.
2124 * @param _A_b1 Argument to bind to @e _A_func.
2125 * @return Adaptor that executes _A_func with the bound argument on invokation.
2129 template <class T_type1, class T_functor>
2130 inline bind_functor<-1, T_functor,
2132 bind(const T_functor& _A_func, T_type1 _A_b1)
2133 { return bind_functor<-1, T_functor,
2138 /** Creates an adaptor of type sigc::bind_functor which fixes the last 2 argument(s) of the passed functor.
2139 * This function overload fixes the last 2 argument(s) of @e _A_func.
2141 * @param _A_func Functor that should be wrapped.
2142 * @param _A_b1 Argument to bind to @e _A_func.
2143 * @param _A_b2 Argument to bind to @e _A_func.
2144 * @return Adaptor that executes _A_func with the bound argument on invokation.
2148 template <class T_type1, class T_type2, class T_functor>
2149 inline bind_functor<-1, T_functor,
2152 bind(const T_functor& _A_func, T_type1 _A_b1, T_type2 _A_b2)
2153 { return bind_functor<-1, T_functor,
2156 (_A_func, _A_b1, _A_b2);
2159 /** Creates an adaptor of type sigc::bind_functor which fixes the last 3 argument(s) of the passed functor.
2160 * This function overload fixes the last 3 argument(s) of @e _A_func.
2162 * @param _A_func Functor that should be wrapped.
2163 * @param _A_b1 Argument to bind to @e _A_func.
2164 * @param _A_b2 Argument to bind to @e _A_func.
2165 * @param _A_b3 Argument to bind to @e _A_func.
2166 * @return Adaptor that executes _A_func with the bound argument on invokation.
2170 template <class T_type1, class T_type2, class T_type3, class T_functor>
2171 inline bind_functor<-1, T_functor,
2175 bind(const T_functor& _A_func, T_type1 _A_b1, T_type2 _A_b2, T_type3 _A_b3)
2176 { return bind_functor<-1, T_functor,
2180 (_A_func, _A_b1, _A_b2, _A_b3);
2183 /** Creates an adaptor of type sigc::bind_functor which fixes the last 4 argument(s) of the passed functor.
2184 * This function overload fixes the last 4 argument(s) of @e _A_func.
2186 * @param _A_func Functor that should be wrapped.
2187 * @param _A_b1 Argument to bind to @e _A_func.
2188 * @param _A_b2 Argument to bind to @e _A_func.
2189 * @param _A_b3 Argument to bind to @e _A_func.
2190 * @param _A_b4 Argument to bind to @e _A_func.
2191 * @return Adaptor that executes _A_func with the bound argument on invokation.
2195 template <class T_type1, class T_type2, class T_type3, class T_type4, class T_functor>
2196 inline bind_functor<-1, T_functor,
2201 bind(const T_functor& _A_func, T_type1 _A_b1, T_type2 _A_b2, T_type3 _A_b3, T_type4 _A_b4)
2202 { return bind_functor<-1, T_functor,
2207 (_A_func, _A_b1, _A_b2, _A_b3, _A_b4);
2210 /** Creates an adaptor of type sigc::bind_functor which fixes the last 5 argument(s) of the passed functor.
2211 * This function overload fixes the last 5 argument(s) of @e _A_func.
2213 * @param _A_func Functor that should be wrapped.
2214 * @param _A_b1 Argument to bind to @e _A_func.
2215 * @param _A_b2 Argument to bind to @e _A_func.
2216 * @param _A_b3 Argument to bind to @e _A_func.
2217 * @param _A_b4 Argument to bind to @e _A_func.
2218 * @param _A_b5 Argument to bind to @e _A_func.
2219 * @return Adaptor that executes _A_func with the bound argument on invokation.
2223 template <class T_type1, class T_type2, class T_type3, class T_type4, class T_type5, class T_functor>
2224 inline bind_functor<-1, T_functor,
2230 bind(const T_functor& _A_func, T_type1 _A_b1, T_type2 _A_b2, T_type3 _A_b3, T_type4 _A_b4, T_type5 _A_b5)
2231 { return bind_functor<-1, T_functor,
2237 (_A_func, _A_b1, _A_b2, _A_b3, _A_b4, _A_b5);
2240 /** Creates an adaptor of type sigc::bind_functor which fixes the last 6 argument(s) of the passed functor.
2241 * This function overload fixes the last 6 argument(s) of @e _A_func.
2243 * @param _A_func Functor that should be wrapped.
2244 * @param _A_b1 Argument to bind to @e _A_func.
2245 * @param _A_b2 Argument to bind to @e _A_func.
2246 * @param _A_b3 Argument to bind to @e _A_func.
2247 * @param _A_b4 Argument to bind to @e _A_func.
2248 * @param _A_b5 Argument to bind to @e _A_func.
2249 * @param _A_b6 Argument to bind to @e _A_func.
2250 * @return Adaptor that executes _A_func with the bound argument on invokation.
2254 template <class T_type1, class T_type2, class T_type3, class T_type4, class T_type5, class T_type6, class T_functor>
2255 inline bind_functor<-1, T_functor,
2262 bind(const T_functor& _A_func, T_type1 _A_b1, T_type2 _A_b2, T_type3 _A_b3, T_type4 _A_b4, T_type5 _A_b5, T_type6 _A_b6)
2263 { return bind_functor<-1, T_functor,
2270 (_A_func, _A_b1, _A_b2, _A_b3, _A_b4, _A_b5, _A_b6);
2273 /** Creates an adaptor of type sigc::bind_functor which fixes the last 7 argument(s) of the passed functor.
2274 * This function overload fixes the last 7 argument(s) of @e _A_func.
2276 * @param _A_func Functor that should be wrapped.
2277 * @param _A_b1 Argument to bind to @e _A_func.
2278 * @param _A_b2 Argument to bind to @e _A_func.
2279 * @param _A_b3 Argument to bind to @e _A_func.
2280 * @param _A_b4 Argument to bind to @e _A_func.
2281 * @param _A_b5 Argument to bind to @e _A_func.
2282 * @param _A_b6 Argument to bind to @e _A_func.
2283 * @param _A_b7 Argument to bind to @e _A_func.
2284 * @return Adaptor that executes _A_func with the bound argument on invokation.
2288 template <class T_type1, class T_type2, class T_type3, class T_type4, class T_type5, class T_type6, class T_type7, class T_functor>
2289 inline bind_functor<-1, T_functor,
2297 bind(const T_functor& _A_func, T_type1 _A_b1, T_type2 _A_b2, T_type3 _A_b3, T_type4 _A_b4, T_type5 _A_b5, T_type6 _A_b6, T_type7 _A_b7)
2298 { return bind_functor<-1, T_functor,
2306 (_A_func, _A_b1, _A_b2, _A_b3, _A_b4, _A_b5, _A_b6, _A_b7);
2310 } /* namespace sigc */
2312 #ifdef SIGC_NIL_HAS_BEEN_PUSHED
2313 #undef SIGC_NIL_HAS_BEEN_PUSHED
2314 #pragma pop_macro("nil")
2316 #endif /* _SIGC_ADAPTORS_BIND_H_ */