1 // -*- c++ -*-
2 /* Do not edit! -- generated file */
3 #ifndef _SIGC_ADAPTORS_LAMBDA_MACROS_GROUPHM4_
4 #define _SIGC_ADAPTORS_LAMBDA_MACROS_GROUPHM4_
5 #include <sigc++/adaptors/lambda/base.h>
6 
7 /** @defgroup group_ group()
8  * sigc::group() alters an arbitrary functor by rebuilding its arguments from one or more lambda expressions.
9  * For each parameter that should be passed to the wrapped functor one lambda expression
10  * has to be passed into group(). Lambda selectors can be used as placeholders for the
11  * arguments passed into the new functor. Arguments that don't have a placeholder in one
12  * of the lambda expressions are dropped.
13  *
14  * @par Examples:
15  *   @code
16  *   void foo(int, int);
17  *   int bar(int);
18  *   // argument binding ...
19  *   sigc::group(&foo,10,sigc::_1)(20); //fixes the first argument and calls foo(10,20)
20  *   sigc::group(&foo,sigc::_1,30)(40); //fixes the second argument and calls foo(40,30)
21  *   // argument reordering ...
22  *   sigc::group(&foo,sigc::_2,sigc::_1)(1,2); //calls foo(2,1)
23  *   // argument hiding ...
24  *   sigc::group(&foo,sigc::_1,sigc::_2)(1,2,3); //calls foo(1,2)
25  *   // functor composition ...
26  *   sigc::group(&foo,sigc::_1,sigc::group(&bar,sigc::_2))(1,2); //calls foo(1,bar(2))
27  *   // algebraic expressions ...
28  *   sigc::group(&foo,sigc::_1*sigc::_2,sigc::_1/sigc::_2)(6,3); //calls foo(6*3,6/3)
29  *   @endcode
30  *
31  * The functor sigc::group() returns can be passed into
32  * sigc::signal::connect() directly.
33  *
34  * @par Example:
35  *   @code
36  *   sigc::signal<void,int,int> some_signal;
37  *   void foo(int);
38  *   some_signal.connect(sigc::group(&foo,sigc::_2));
39  *   @endcode
40  *
41  * Like in sigc::bind() you can bind references to functors by passing the objects
42  * through the sigc::ref() helper function.
43  *
44  * @par Example:
45  *   @code
46  *   int some_int;
47  *   sigc::signal<void> some_signal;
48  *   void foo(int&);
49  *   some_signal.connect(sigc::group(&foo,sigc::ref(some_int)));
50  *   @endcode
51  *
52  * If you bind an object of a sigc::trackable derived type to a functor
53  * by reference, a slot assigned to the group adaptor is cleared automatically
54  * when the object goes out of scope.
55  *
56  * @par Example:
57  *   @code
58  *   struct bar : public sigc::trackable {} some_bar;
59  *   sigc::signal<void> some_signal;
60  *   void foo(bar&);
61  *   some_signal.connect(sigc::group(&foo,sigc::ref(some_bar)));
62  *     // disconnected automatically if some_bar goes out of scope
63  *   @endcode
64  *
65  * @ingroup adaptors, lambdas
66  */
67 
68 namespace sigc {
69 
70 template <class T_functor, class T_type1>
71 struct lambda_group1 : public lambda_base
72 {
73   typedef typename functor_trait<T_functor>::result_type result_type;
74   typedef typename lambda<T_type1>::lambda_type   value1_type;
75   typedef typename adaptor_trait<T_functor>::adaptor_type functor_type;
76 
77   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>
78   struct deduce_result_type
79     { typedef typename functor_type::template deduce_result_type<
80           typename value1_type::template deduce_result_type<
81             typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::type
82         >::type type; };
83 
84   result_type
85   operator ()() const;
86 
87   template <class T_arg1>
88   typename deduce_result_type<T_arg1>::type
operatorlambda_group189   operator() (T_arg1 _A_1) const
90     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
91           typename value1_type::template deduce_result_type<T_arg1>::type>(
92         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
93           typename type_trait<T_arg1>::pass>(_A_1)); }
94 
95   #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
96   template <class T_arg1>
97   typename deduce_result_type<T_arg1>::type
sun_forte_workaroundlambda_group198   sun_forte_workaround (T_arg1 _A_1) const
99     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
100           typename value1_type::template deduce_result_type<T_arg1>::type>(
101         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
102           typename type_trait<T_arg1>::pass>(_A_1)); }
103   #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
104 
105   template <class T_arg1,class T_arg2>
106   typename deduce_result_type<T_arg1,T_arg2>::type
operatorlambda_group1107   operator() (T_arg1 _A_1,T_arg2 _A_2) const
108     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
109           typename value1_type::template deduce_result_type<T_arg1,T_arg2>::type>(
110         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
111           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2)); }
112 
113   #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
114   template <class T_arg1,class T_arg2>
115   typename deduce_result_type<T_arg1,T_arg2>::type
sun_forte_workaroundlambda_group1116   sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2) const
117     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
118           typename value1_type::template deduce_result_type<T_arg1,T_arg2>::type>(
119         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
120           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2)); }
121   #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
122 
123   template <class T_arg1,class T_arg2,class T_arg3>
124   typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type
operatorlambda_group1125   operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const
126     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
127           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type>(
128         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
129           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3)); }
130 
131   #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
132   template <class T_arg1,class T_arg2,class T_arg3>
133   typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type
sun_forte_workaroundlambda_group1134   sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const
135     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
136           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type>(
137         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
138           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3)); }
139   #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
140 
141   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4>
142   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type
operatorlambda_group1143   operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const
144     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
145           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type>(
146         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
147           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4)); }
148 
149   #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
150   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4>
151   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type
sun_forte_workaroundlambda_group1152   sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const
153     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
154           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type>(
155         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
156           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4)); }
157   #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
158 
159   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
160   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type
operatorlambda_group1161   operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const
162     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
163           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type>(
164         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
165           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5)); }
166 
167   #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
168   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
169   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type
sun_forte_workaroundlambda_group1170   sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const
171     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
172           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type>(
173         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
174           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5)); }
175   #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
176 
177   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
178   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type
operatorlambda_group1179   operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const
180     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
181           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type>(
182         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
183           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6)); }
184 
185   #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
186   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
187   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type
sun_forte_workaroundlambda_group1188   sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const
189     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
190           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type>(
191         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
192           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6)); }
193   #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
194 
195   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7>
196   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type
operatorlambda_group1197   operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const
198     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
199           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type>(
200         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
201           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7)); }
202 
203   #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
204   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7>
205   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type
sun_forte_workaroundlambda_group1206   sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const
207     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
208           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type>(
209         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
210           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7)); }
211   #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
212 
lambda_group1lambda_group1213   lambda_group1(typename type_trait<T_functor>::take _A_func, typename type_trait<T_type1>::take _A_1)
214     : value1_(_A_1), func_(_A_func) {}
215 
216   value1_type value1_;
217   mutable functor_type func_;
218 };
219 
220 template <class T_functor, class T_type1>
221 typename lambda_group1<T_functor, T_type1>::result_type
operator()222 lambda_group1<T_functor, T_type1>::operator ()() const
223   { return func_(value1_()); }
224 
225 
226 //template specialization of visit_each<>(action, functor):
227 template <class T_action, class T_functor, class T_type1>
visit_each(const T_action & _A_action,const lambda_group1<T_functor,T_type1> & _A_target)228 void visit_each(const T_action& _A_action,
229                 const lambda_group1<T_functor, T_type1>& _A_target)
230 {
231   visit_each(_A_action, _A_target.value1_);
232   visit_each(_A_action, _A_target.func_);
233 }
234 
235 
236 template <class T_functor, class T_type1,class T_type2>
237 struct lambda_group2 : public lambda_base
238 {
239   typedef typename functor_trait<T_functor>::result_type result_type;
240   typedef typename lambda<T_type1>::lambda_type   value1_type;
241   typedef typename lambda<T_type2>::lambda_type   value2_type;
242   typedef typename adaptor_trait<T_functor>::adaptor_type functor_type;
243 
244   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>
245   struct deduce_result_type
246     { typedef typename functor_type::template deduce_result_type<
247           typename value1_type::template deduce_result_type<
248             typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::type,
249           typename value2_type::template deduce_result_type<
250             typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::type
251         >::type type; };
252 
253   result_type
254   operator ()() const;
255 
256   template <class T_arg1>
257   typename deduce_result_type<T_arg1>::type
operatorlambda_group2258   operator() (T_arg1 _A_1) const
259     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
260           typename value1_type::template deduce_result_type<T_arg1>::type,
261           typename value2_type::template deduce_result_type<T_arg1>::type>(
262         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
263           typename type_trait<T_arg1>::pass>(_A_1),
264         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
265           typename type_trait<T_arg1>::pass>(_A_1)); }
266 
267   #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
268   template <class T_arg1>
269   typename deduce_result_type<T_arg1>::type
sun_forte_workaroundlambda_group2270   sun_forte_workaround (T_arg1 _A_1) const
271     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
272           typename value1_type::template deduce_result_type<T_arg1>::type,
273           typename value2_type::template deduce_result_type<T_arg1>::type>(
274         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
275           typename type_trait<T_arg1>::pass>(_A_1),
276         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
277           typename type_trait<T_arg1>::pass>(_A_1)); }
278   #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
279 
280   template <class T_arg1,class T_arg2>
281   typename deduce_result_type<T_arg1,T_arg2>::type
operatorlambda_group2282   operator() (T_arg1 _A_1,T_arg2 _A_2) const
283     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
284           typename value1_type::template deduce_result_type<T_arg1,T_arg2>::type,
285           typename value2_type::template deduce_result_type<T_arg1,T_arg2>::type>(
286         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
287           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2),
288         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
289           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2)); }
290 
291   #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
292   template <class T_arg1,class T_arg2>
293   typename deduce_result_type<T_arg1,T_arg2>::type
sun_forte_workaroundlambda_group2294   sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2) const
295     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
296           typename value1_type::template deduce_result_type<T_arg1,T_arg2>::type,
297           typename value2_type::template deduce_result_type<T_arg1,T_arg2>::type>(
298         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
299           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2),
300         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
301           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2)); }
302   #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
303 
304   template <class T_arg1,class T_arg2,class T_arg3>
305   typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type
operatorlambda_group2306   operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const
307     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
308           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type,
309           typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type>(
310         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
311           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3),
312         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
313           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3)); }
314 
315   #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
316   template <class T_arg1,class T_arg2,class T_arg3>
317   typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type
sun_forte_workaroundlambda_group2318   sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const
319     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
320           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type,
321           typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type>(
322         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
323           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3),
324         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
325           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3)); }
326   #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
327 
328   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4>
329   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type
operatorlambda_group2330   operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const
331     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
332           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type,
333           typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type>(
334         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
335           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4),
336         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
337           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4)); }
338 
339   #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
340   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4>
341   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type
sun_forte_workaroundlambda_group2342   sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const
343     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
344           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type,
345           typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type>(
346         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
347           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4),
348         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
349           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4)); }
350   #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
351 
352   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
353   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type
operatorlambda_group2354   operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const
355     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
356           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type,
357           typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type>(
358         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
359           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5),
360         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
361           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5)); }
362 
363   #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
364   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
365   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type
sun_forte_workaroundlambda_group2366   sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const
367     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
368           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type,
369           typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type>(
370         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
371           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5),
372         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
373           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5)); }
374   #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
375 
376   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
377   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type
operatorlambda_group2378   operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const
379     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
380           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type,
381           typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type>(
382         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
383           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6),
384         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
385           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6)); }
386 
387   #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
388   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
389   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type
sun_forte_workaroundlambda_group2390   sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const
391     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
392           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type,
393           typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type>(
394         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
395           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6),
396         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
397           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6)); }
398   #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
399 
400   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7>
401   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type
operatorlambda_group2402   operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const
403     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
404           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type,
405           typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type>(
406         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
407           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7),
408         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
409           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7)); }
410 
411   #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
412   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7>
413   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type
sun_forte_workaroundlambda_group2414   sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const
415     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
416           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type,
417           typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type>(
418         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
419           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7),
420         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
421           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7)); }
422   #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
423 
lambda_group2lambda_group2424   lambda_group2(typename type_trait<T_functor>::take _A_func, typename type_trait<T_type1>::take _A_1,typename type_trait<T_type2>::take _A_2)
425     : value1_(_A_1),value2_(_A_2), func_(_A_func) {}
426 
427   value1_type value1_;
428   value2_type value2_;
429   mutable functor_type func_;
430 };
431 
432 template <class T_functor, class T_type1,class T_type2>
433 typename lambda_group2<T_functor, T_type1,T_type2>::result_type
operator()434 lambda_group2<T_functor, T_type1,T_type2>::operator ()() const
435   { return func_(value1_(),value2_()); }
436 
437 
438 //template specialization of visit_each<>(action, functor):
439 template <class T_action, class T_functor, class T_type1,class T_type2>
visit_each(const T_action & _A_action,const lambda_group2<T_functor,T_type1,T_type2> & _A_target)440 void visit_each(const T_action& _A_action,
441                 const lambda_group2<T_functor, T_type1,T_type2>& _A_target)
442 {
443   visit_each(_A_action, _A_target.value1_);
444   visit_each(_A_action, _A_target.value2_);
445   visit_each(_A_action, _A_target.func_);
446 }
447 
448 
449 template <class T_functor, class T_type1,class T_type2,class T_type3>
450 struct lambda_group3 : public lambda_base
451 {
452   typedef typename functor_trait<T_functor>::result_type result_type;
453   typedef typename lambda<T_type1>::lambda_type   value1_type;
454   typedef typename lambda<T_type2>::lambda_type   value2_type;
455   typedef typename lambda<T_type3>::lambda_type   value3_type;
456   typedef typename adaptor_trait<T_functor>::adaptor_type functor_type;
457 
458   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>
459   struct deduce_result_type
460     { typedef typename functor_type::template deduce_result_type<
461           typename value1_type::template deduce_result_type<
462             typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::type,
463           typename value2_type::template deduce_result_type<
464             typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::type,
465           typename value3_type::template deduce_result_type<
466             typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::type
467         >::type type; };
468 
469   result_type
470   operator ()() const;
471 
472   template <class T_arg1>
473   typename deduce_result_type<T_arg1>::type
operatorlambda_group3474   operator() (T_arg1 _A_1) const
475     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
476           typename value1_type::template deduce_result_type<T_arg1>::type,
477           typename value2_type::template deduce_result_type<T_arg1>::type,
478           typename value3_type::template deduce_result_type<T_arg1>::type>(
479         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
480           typename type_trait<T_arg1>::pass>(_A_1),
481         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
482           typename type_trait<T_arg1>::pass>(_A_1),
483         this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
484           typename type_trait<T_arg1>::pass>(_A_1)); }
485 
486   #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
487   template <class T_arg1>
488   typename deduce_result_type<T_arg1>::type
sun_forte_workaroundlambda_group3489   sun_forte_workaround (T_arg1 _A_1) const
490     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
491           typename value1_type::template deduce_result_type<T_arg1>::type,
492           typename value2_type::template deduce_result_type<T_arg1>::type,
493           typename value3_type::template deduce_result_type<T_arg1>::type>(
494         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
495           typename type_trait<T_arg1>::pass>(_A_1),
496         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
497           typename type_trait<T_arg1>::pass>(_A_1),
498         this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
499           typename type_trait<T_arg1>::pass>(_A_1)); }
500   #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
501 
502   template <class T_arg1,class T_arg2>
503   typename deduce_result_type<T_arg1,T_arg2>::type
operatorlambda_group3504   operator() (T_arg1 _A_1,T_arg2 _A_2) const
505     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
506           typename value1_type::template deduce_result_type<T_arg1,T_arg2>::type,
507           typename value2_type::template deduce_result_type<T_arg1,T_arg2>::type,
508           typename value3_type::template deduce_result_type<T_arg1,T_arg2>::type>(
509         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
510           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2),
511         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
512           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2),
513         this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
514           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2)); }
515 
516   #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
517   template <class T_arg1,class T_arg2>
518   typename deduce_result_type<T_arg1,T_arg2>::type
sun_forte_workaroundlambda_group3519   sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2) const
520     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
521           typename value1_type::template deduce_result_type<T_arg1,T_arg2>::type,
522           typename value2_type::template deduce_result_type<T_arg1,T_arg2>::type,
523           typename value3_type::template deduce_result_type<T_arg1,T_arg2>::type>(
524         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
525           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2),
526         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
527           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2),
528         this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
529           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2)); }
530   #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
531 
532   template <class T_arg1,class T_arg2,class T_arg3>
533   typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type
operatorlambda_group3534   operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const
535     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
536           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type,
537           typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type,
538           typename value3_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type>(
539         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
540           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3),
541         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
542           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3),
543         this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
544           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3)); }
545 
546   #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
547   template <class T_arg1,class T_arg2,class T_arg3>
548   typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type
sun_forte_workaroundlambda_group3549   sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const
550     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
551           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type,
552           typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type,
553           typename value3_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type>(
554         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
555           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3),
556         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
557           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3),
558         this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
559           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3)); }
560   #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
561 
562   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4>
563   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type
operatorlambda_group3564   operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const
565     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
566           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type,
567           typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type,
568           typename value3_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type>(
569         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
570           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4),
571         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
572           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4),
573         this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
574           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4)); }
575 
576   #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
577   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4>
578   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type
sun_forte_workaroundlambda_group3579   sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const
580     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
581           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type,
582           typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type,
583           typename value3_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type>(
584         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
585           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4),
586         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
587           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4),
588         this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
589           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4)); }
590   #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
591 
592   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
593   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type
operatorlambda_group3594   operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const
595     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
596           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type,
597           typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type,
598           typename value3_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type>(
599         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
600           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5),
601         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
602           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5),
603         this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
604           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5)); }
605 
606   #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
607   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
608   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type
sun_forte_workaroundlambda_group3609   sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const
610     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
611           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type,
612           typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type,
613           typename value3_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type>(
614         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
615           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5),
616         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
617           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5),
618         this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
619           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5)); }
620   #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
621 
622   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
623   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type
operatorlambda_group3624   operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const
625     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
626           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type,
627           typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type,
628           typename value3_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type>(
629         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
630           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6),
631         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
632           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6),
633         this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
634           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6)); }
635 
636   #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
637   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
638   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type
sun_forte_workaroundlambda_group3639   sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const
640     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
641           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type,
642           typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type,
643           typename value3_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type>(
644         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
645           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6),
646         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
647           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6),
648         this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
649           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6)); }
650   #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
651 
652   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7>
653   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type
operatorlambda_group3654   operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const
655     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
656           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type,
657           typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type,
658           typename value3_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type>(
659         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
660           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7),
661         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
662           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7),
663         this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
664           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7)); }
665 
666   #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
667   template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7>
668   typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type
sun_forte_workaroundlambda_group3669   sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const
670     { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
671           typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type,
672           typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type,
673           typename value3_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type>(
674         this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
675           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7),
676         this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
677           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7),
678         this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<
679           typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7)); }
680   #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
681 
lambda_group3lambda_group3682   lambda_group3(typename type_trait<T_functor>::take _A_func, typename type_trait<T_type1>::take _A_1,typename type_trait<T_type2>::take _A_2,typename type_trait<T_type3>::take _A_3)
683     : value1_(_A_1),value2_(_A_2),value3_(_A_3), func_(_A_func) {}
684 
685   value1_type value1_;
686   value2_type value2_;
687   value3_type value3_;
688   mutable functor_type func_;
689 };
690 
691 template <class T_functor, class T_type1,class T_type2,class T_type3>
692 typename lambda_group3<T_functor, T_type1,T_type2,T_type3>::result_type
operator()693 lambda_group3<T_functor, T_type1,T_type2,T_type3>::operator ()() const
694   { return func_(value1_(),value2_(),value3_()); }
695 
696 
697 //template specialization of visit_each<>(action, functor):
698 template <class T_action, class T_functor, class T_type1,class T_type2,class T_type3>
visit_each(const T_action & _A_action,const lambda_group3<T_functor,T_type1,T_type2,T_type3> & _A_target)699 void visit_each(const T_action& _A_action,
700                 const lambda_group3<T_functor, T_type1,T_type2,T_type3>& _A_target)
701 {
702   visit_each(_A_action, _A_target.value1_);
703   visit_each(_A_action, _A_target.value2_);
704   visit_each(_A_action, _A_target.value3_);
705   visit_each(_A_action, _A_target.func_);
706 }
707 
708 
709 
710 template <class T_functor, class T_type1>
711 lambda<lambda_group1<T_functor, typename unwrap_reference<T_type1>::type> >
group(const T_functor & _A_func,T_type1 _A_1)712 group(const T_functor& _A_func, T_type1 _A_1)
713 {
714   typedef lambda_group1<T_functor, typename unwrap_reference<T_type1>::type> T_lambda;
715   return lambda<T_lambda>(T_lambda(_A_func, _A_1));
716 }
717 
718 template <class T_functor, class T_type1,class T_type2>
719 lambda<lambda_group2<T_functor, typename unwrap_reference<T_type1>::type,typename unwrap_reference<T_type2>::type> >
group(const T_functor & _A_func,T_type1 _A_1,T_type2 _A_2)720 group(const T_functor& _A_func, T_type1 _A_1,T_type2 _A_2)
721 {
722   typedef lambda_group2<T_functor, typename unwrap_reference<T_type1>::type,typename unwrap_reference<T_type2>::type> T_lambda;
723   return lambda<T_lambda>(T_lambda(_A_func, _A_1,_A_2));
724 }
725 
726 template <class T_functor, class T_type1,class T_type2,class T_type3>
727 lambda<lambda_group3<T_functor, typename unwrap_reference<T_type1>::type,typename unwrap_reference<T_type2>::type,typename unwrap_reference<T_type3>::type> >
group(const T_functor & _A_func,T_type1 _A_1,T_type2 _A_2,T_type3 _A_3)728 group(const T_functor& _A_func, T_type1 _A_1,T_type2 _A_2,T_type3 _A_3)
729 {
730   typedef lambda_group3<T_functor, typename unwrap_reference<T_type1>::type,typename unwrap_reference<T_type2>::type,typename unwrap_reference<T_type3>::type> T_lambda;
731   return lambda<T_lambda>(T_lambda(_A_func, _A_1,_A_2,_A_3));
732 }
733 
734 
735 
736 } /* namespace sigc */
737 #endif /* _SIGC_ADAPTORS_LAMBDA_MACROS_GROUPHM4_ */
738