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