1 /////////////////////////////////////////////////////////////////////////////// 2 /// \file pass_through_impl.hpp 3 /// 4 /// Specializations of pass_through_impl, used in the implementation of the 5 /// pass_through transform. 6 // 7 // Copyright 2008 Eric Niebler. Distributed under the Boost 8 // Software License, Version 1.0. (See accompanying file 9 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 10 template<typename Grammar, typename Domain, typename Expr, typename State, typename Data> 11 struct pass_through_impl<Grammar, Domain, Expr, State, Data, 1> 12 : transform_impl<Expr, State, Data> 13 { 14 typedef typename pass_through_impl::expr unref_expr; 15 typedef 16 typename mpl::if_c< 17 is_same<Domain, deduce_domain>::value 18 , typename unref_expr::proto_domain 19 , Domain 20 >::type 21 result_domain; 22 typedef 23 typename base_expr< 24 result_domain 25 , typename unref_expr::proto_tag 26 , list1< 27 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type 28 > 29 >::type 30 expr_type; 31 typedef typename result_domain::proto_generator proto_generator; 32 typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type; 33 BOOST_FORCEINLINE BOOST_PROTO_RETURN_TYPE_STRICT_LOOSEpass_through_impl34 BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const) 35 operator ()( 36 typename pass_through_impl::expr_param e 37 , typename pass_through_impl::state_param s 38 , typename pass_through_impl::data_param d 39 ) const 40 { 41 expr_type const that = { 42 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) 43 }; 44 45 46 47 detail::ignore_unused(&that); 48 return proto_generator()(that); 49 } 50 }; 51 template<typename Grammar, typename Domain, typename Expr, typename State, typename Data> 52 struct pass_through_impl<Grammar, Domain, Expr, State, Data, 2> 53 : transform_impl<Expr, State, Data> 54 { 55 typedef typename pass_through_impl::expr unref_expr; 56 typedef 57 typename mpl::if_c< 58 is_same<Domain, deduce_domain>::value 59 , typename unref_expr::proto_domain 60 , Domain 61 >::type 62 result_domain; 63 typedef 64 typename base_expr< 65 result_domain 66 , typename unref_expr::proto_tag 67 , list2< 68 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type 69 > 70 >::type 71 expr_type; 72 typedef typename result_domain::proto_generator proto_generator; 73 typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type; 74 BOOST_FORCEINLINE BOOST_PROTO_RETURN_TYPE_STRICT_LOOSEpass_through_impl75 BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const) 76 operator ()( 77 typename pass_through_impl::expr_param e 78 , typename pass_through_impl::state_param s 79 , typename pass_through_impl::data_param d 80 ) const 81 { 82 expr_type const that = { 83 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) 84 }; 85 86 87 88 detail::ignore_unused(&that); 89 return proto_generator()(that); 90 } 91 }; 92 template<typename Grammar, typename Domain, typename Expr, typename State, typename Data> 93 struct pass_through_impl<Grammar, Domain, Expr, State, Data, 3> 94 : transform_impl<Expr, State, Data> 95 { 96 typedef typename pass_through_impl::expr unref_expr; 97 typedef 98 typename mpl::if_c< 99 is_same<Domain, deduce_domain>::value 100 , typename unref_expr::proto_domain 101 , Domain 102 >::type 103 result_domain; 104 typedef 105 typename base_expr< 106 result_domain 107 , typename unref_expr::proto_tag 108 , list3< 109 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type 110 > 111 >::type 112 expr_type; 113 typedef typename result_domain::proto_generator proto_generator; 114 typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type; 115 BOOST_FORCEINLINE BOOST_PROTO_RETURN_TYPE_STRICT_LOOSEpass_through_impl116 BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const) 117 operator ()( 118 typename pass_through_impl::expr_param e 119 , typename pass_through_impl::state_param s 120 , typename pass_through_impl::data_param d 121 ) const 122 { 123 expr_type const that = { 124 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) 125 }; 126 127 128 129 detail::ignore_unused(&that); 130 return proto_generator()(that); 131 } 132 }; 133 template<typename Grammar, typename Domain, typename Expr, typename State, typename Data> 134 struct pass_through_impl<Grammar, Domain, Expr, State, Data, 4> 135 : transform_impl<Expr, State, Data> 136 { 137 typedef typename pass_through_impl::expr unref_expr; 138 typedef 139 typename mpl::if_c< 140 is_same<Domain, deduce_domain>::value 141 , typename unref_expr::proto_domain 142 , Domain 143 >::type 144 result_domain; 145 typedef 146 typename base_expr< 147 result_domain 148 , typename unref_expr::proto_tag 149 , list4< 150 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type 151 > 152 >::type 153 expr_type; 154 typedef typename result_domain::proto_generator proto_generator; 155 typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type; 156 BOOST_FORCEINLINE BOOST_PROTO_RETURN_TYPE_STRICT_LOOSEpass_through_impl157 BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const) 158 operator ()( 159 typename pass_through_impl::expr_param e 160 , typename pass_through_impl::state_param s 161 , typename pass_through_impl::data_param d 162 ) const 163 { 164 expr_type const that = { 165 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) 166 }; 167 168 169 170 detail::ignore_unused(&that); 171 return proto_generator()(that); 172 } 173 }; 174 template<typename Grammar, typename Domain, typename Expr, typename State, typename Data> 175 struct pass_through_impl<Grammar, Domain, Expr, State, Data, 5> 176 : transform_impl<Expr, State, Data> 177 { 178 typedef typename pass_through_impl::expr unref_expr; 179 typedef 180 typename mpl::if_c< 181 is_same<Domain, deduce_domain>::value 182 , typename unref_expr::proto_domain 183 , Domain 184 >::type 185 result_domain; 186 typedef 187 typename base_expr< 188 result_domain 189 , typename unref_expr::proto_tag 190 , list5< 191 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type 192 > 193 >::type 194 expr_type; 195 typedef typename result_domain::proto_generator proto_generator; 196 typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type; 197 BOOST_FORCEINLINE BOOST_PROTO_RETURN_TYPE_STRICT_LOOSEpass_through_impl198 BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const) 199 operator ()( 200 typename pass_through_impl::expr_param e 201 , typename pass_through_impl::state_param s 202 , typename pass_through_impl::data_param d 203 ) const 204 { 205 expr_type const that = { 206 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d ) 207 }; 208 209 210 211 detail::ignore_unused(&that); 212 return proto_generator()(that); 213 } 214 }; 215 template<typename Grammar, typename Domain, typename Expr, typename State, typename Data> 216 struct pass_through_impl<Grammar, Domain, Expr, State, Data, 6> 217 : transform_impl<Expr, State, Data> 218 { 219 typedef typename pass_through_impl::expr unref_expr; 220 typedef 221 typename mpl::if_c< 222 is_same<Domain, deduce_domain>::value 223 , typename unref_expr::proto_domain 224 , Domain 225 >::type 226 result_domain; 227 typedef 228 typename base_expr< 229 result_domain 230 , typename unref_expr::proto_tag 231 , list6< 232 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >::result_type 233 > 234 >::type 235 expr_type; 236 typedef typename result_domain::proto_generator proto_generator; 237 typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type; 238 BOOST_FORCEINLINE BOOST_PROTO_RETURN_TYPE_STRICT_LOOSEpass_through_impl239 BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const) 240 operator ()( 241 typename pass_through_impl::expr_param e 242 , typename pass_through_impl::state_param s 243 , typename pass_through_impl::data_param d 244 ) const 245 { 246 expr_type const that = { 247 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d ) , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >()( e.proto_base().child5, s, d ) 248 }; 249 250 251 252 detail::ignore_unused(&that); 253 return proto_generator()(that); 254 } 255 }; 256 template<typename Grammar, typename Domain, typename Expr, typename State, typename Data> 257 struct pass_through_impl<Grammar, Domain, Expr, State, Data, 7> 258 : transform_impl<Expr, State, Data> 259 { 260 typedef typename pass_through_impl::expr unref_expr; 261 typedef 262 typename mpl::if_c< 263 is_same<Domain, deduce_domain>::value 264 , typename unref_expr::proto_domain 265 , Domain 266 >::type 267 result_domain; 268 typedef 269 typename base_expr< 270 result_domain 271 , typename unref_expr::proto_tag 272 , list7< 273 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >::result_type , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >::result_type 274 > 275 >::type 276 expr_type; 277 typedef typename result_domain::proto_generator proto_generator; 278 typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type; 279 BOOST_FORCEINLINE BOOST_PROTO_RETURN_TYPE_STRICT_LOOSEpass_through_impl280 BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const) 281 operator ()( 282 typename pass_through_impl::expr_param e 283 , typename pass_through_impl::state_param s 284 , typename pass_through_impl::data_param d 285 ) const 286 { 287 expr_type const that = { 288 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d ) , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >()( e.proto_base().child5, s, d ) , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >()( e.proto_base().child6, s, d ) 289 }; 290 291 292 293 detail::ignore_unused(&that); 294 return proto_generator()(that); 295 } 296 }; 297 template<typename Grammar, typename Domain, typename Expr, typename State, typename Data> 298 struct pass_through_impl<Grammar, Domain, Expr, State, Data, 8> 299 : transform_impl<Expr, State, Data> 300 { 301 typedef typename pass_through_impl::expr unref_expr; 302 typedef 303 typename mpl::if_c< 304 is_same<Domain, deduce_domain>::value 305 , typename unref_expr::proto_domain 306 , Domain 307 >::type 308 result_domain; 309 typedef 310 typename base_expr< 311 result_domain 312 , typename unref_expr::proto_tag 313 , list8< 314 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >::result_type , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >::result_type , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >::result_type 315 > 316 >::type 317 expr_type; 318 typedef typename result_domain::proto_generator proto_generator; 319 typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type; 320 BOOST_FORCEINLINE BOOST_PROTO_RETURN_TYPE_STRICT_LOOSEpass_through_impl321 BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const) 322 operator ()( 323 typename pass_through_impl::expr_param e 324 , typename pass_through_impl::state_param s 325 , typename pass_through_impl::data_param d 326 ) const 327 { 328 expr_type const that = { 329 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d ) , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >()( e.proto_base().child5, s, d ) , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >()( e.proto_base().child6, s, d ) , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >()( e.proto_base().child7, s, d ) 330 }; 331 332 333 334 detail::ignore_unused(&that); 335 return proto_generator()(that); 336 } 337 }; 338 template<typename Grammar, typename Domain, typename Expr, typename State, typename Data> 339 struct pass_through_impl<Grammar, Domain, Expr, State, Data, 9> 340 : transform_impl<Expr, State, Data> 341 { 342 typedef typename pass_through_impl::expr unref_expr; 343 typedef 344 typename mpl::if_c< 345 is_same<Domain, deduce_domain>::value 346 , typename unref_expr::proto_domain 347 , Domain 348 >::type 349 result_domain; 350 typedef 351 typename base_expr< 352 result_domain 353 , typename unref_expr::proto_tag 354 , list9< 355 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >::result_type , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >::result_type , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >::result_type , typename Grammar::proto_child8::template impl< typename result_of::child_c<Expr, 8>::type , State , Data >::result_type 356 > 357 >::type 358 expr_type; 359 typedef typename result_domain::proto_generator proto_generator; 360 typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type; 361 BOOST_FORCEINLINE BOOST_PROTO_RETURN_TYPE_STRICT_LOOSEpass_through_impl362 BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const) 363 operator ()( 364 typename pass_through_impl::expr_param e 365 , typename pass_through_impl::state_param s 366 , typename pass_through_impl::data_param d 367 ) const 368 { 369 expr_type const that = { 370 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d ) , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >()( e.proto_base().child5, s, d ) , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >()( e.proto_base().child6, s, d ) , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >()( e.proto_base().child7, s, d ) , typename Grammar::proto_child8::template impl< typename result_of::child_c<Expr, 8>::type , State , Data >()( e.proto_base().child8, s, d ) 371 }; 372 373 374 375 detail::ignore_unused(&that); 376 return proto_generator()(that); 377 } 378 }; 379 template<typename Grammar, typename Domain, typename Expr, typename State, typename Data> 380 struct pass_through_impl<Grammar, Domain, Expr, State, Data, 10> 381 : transform_impl<Expr, State, Data> 382 { 383 typedef typename pass_through_impl::expr unref_expr; 384 typedef 385 typename mpl::if_c< 386 is_same<Domain, deduce_domain>::value 387 , typename unref_expr::proto_domain 388 , Domain 389 >::type 390 result_domain; 391 typedef 392 typename base_expr< 393 result_domain 394 , typename unref_expr::proto_tag 395 , list10< 396 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >::result_type , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >::result_type , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >::result_type , typename Grammar::proto_child8::template impl< typename result_of::child_c<Expr, 8>::type , State , Data >::result_type , typename Grammar::proto_child9::template impl< typename result_of::child_c<Expr, 9>::type , State , Data >::result_type 397 > 398 >::type 399 expr_type; 400 typedef typename result_domain::proto_generator proto_generator; 401 typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type; 402 BOOST_FORCEINLINE BOOST_PROTO_RETURN_TYPE_STRICT_LOOSEpass_through_impl403 BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const) 404 operator ()( 405 typename pass_through_impl::expr_param e 406 , typename pass_through_impl::state_param s 407 , typename pass_through_impl::data_param d 408 ) const 409 { 410 expr_type const that = { 411 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d ) , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >()( e.proto_base().child5, s, d ) , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >()( e.proto_base().child6, s, d ) , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >()( e.proto_base().child7, s, d ) , typename Grammar::proto_child8::template impl< typename result_of::child_c<Expr, 8>::type , State , Data >()( e.proto_base().child8, s, d ) , typename Grammar::proto_child9::template impl< typename result_of::child_c<Expr, 9>::type , State , Data >()( e.proto_base().child9, s, d ) 412 }; 413 414 415 416 detail::ignore_unused(&that); 417 return proto_generator()(that); 418 } 419 }; 420