1 /////////////////////////////////////////////////////////////////////////////// 2 /// \file default_function_impl.hpp 3 /// Contains definition of the default_function_impl, the implementation of the 4 /// _default transform for function-like nodes. 5 // 6 // Copyright 2008 Eric Niebler. Distributed under the Boost 7 // Software License, Version 1.0. (See accompanying file 8 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9 template<typename Grammar, typename Expr, typename State, typename Data> 10 struct default_function_impl<Grammar, Expr, State, Data, 3> 11 : transform_impl<Expr, State, Data> 12 { 13 typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2; 14 typedef 15 typename proto::detail::result_of_fixup<r0>::type 16 function_type; 17 typedef 18 typename BOOST_PROTO_RESULT_OF< 19 function_type(r1 , r2) 20 >::type 21 result_type; operator ()default_function_impl22 result_type operator ()( 23 typename default_function_impl::expr_param e 24 , typename default_function_impl::state_param s 25 , typename default_function_impl::data_param d 26 ) const 27 { 28 return this->invoke(e, s, d, is_member_function_pointer<function_type>()); 29 } 30 private: invokedefault_function_impl31 result_type invoke( 32 typename default_function_impl::expr_param e 33 , typename default_function_impl::state_param s 34 , typename default_function_impl::data_param d 35 , mpl::false_ 36 ) const 37 { 38 return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )( 39 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) 40 ); 41 } invokedefault_function_impl42 result_type invoke( 43 typename default_function_impl::expr_param e 44 , typename default_function_impl::state_param s 45 , typename default_function_impl::data_param d 46 , mpl::true_ 47 ) const 48 { 49 BOOST_PROTO_USE_GET_POINTER(); 50 typedef typename detail::class_member_traits<function_type>::class_type class_type; 51 return ( 52 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->* 53 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d ) 54 )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d )); 55 } 56 }; 57 template<typename Grammar, typename Expr, typename State, typename Data> 58 struct default_function_impl<Grammar, Expr, State, Data, 4> 59 : transform_impl<Expr, State, Data> 60 { 61 typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2; typedef typename result_of::child_c< Expr, 3>::type e3; typedef typename Grammar::template impl<e3, State, Data>::result_type r3; 62 typedef 63 typename proto::detail::result_of_fixup<r0>::type 64 function_type; 65 typedef 66 typename BOOST_PROTO_RESULT_OF< 67 function_type(r1 , r2 , r3) 68 >::type 69 result_type; operator ()default_function_impl70 result_type operator ()( 71 typename default_function_impl::expr_param e 72 , typename default_function_impl::state_param s 73 , typename default_function_impl::data_param d 74 ) const 75 { 76 return this->invoke(e, s, d, is_member_function_pointer<function_type>()); 77 } 78 private: invokedefault_function_impl79 result_type invoke( 80 typename default_function_impl::expr_param e 81 , typename default_function_impl::state_param s 82 , typename default_function_impl::data_param d 83 , mpl::false_ 84 ) const 85 { 86 return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )( 87 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) 88 ); 89 } invokedefault_function_impl90 result_type invoke( 91 typename default_function_impl::expr_param e 92 , typename default_function_impl::state_param s 93 , typename default_function_impl::data_param d 94 , mpl::true_ 95 ) const 96 { 97 BOOST_PROTO_USE_GET_POINTER(); 98 typedef typename detail::class_member_traits<function_type>::class_type class_type; 99 return ( 100 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->* 101 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d ) 102 )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d )); 103 } 104 }; 105 template<typename Grammar, typename Expr, typename State, typename Data> 106 struct default_function_impl<Grammar, Expr, State, Data, 5> 107 : transform_impl<Expr, State, Data> 108 { 109 typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2; typedef typename result_of::child_c< Expr, 3>::type e3; typedef typename Grammar::template impl<e3, State, Data>::result_type r3; typedef typename result_of::child_c< Expr, 4>::type e4; typedef typename Grammar::template impl<e4, State, Data>::result_type r4; 110 typedef 111 typename proto::detail::result_of_fixup<r0>::type 112 function_type; 113 typedef 114 typename BOOST_PROTO_RESULT_OF< 115 function_type(r1 , r2 , r3 , r4) 116 >::type 117 result_type; operator ()default_function_impl118 result_type operator ()( 119 typename default_function_impl::expr_param e 120 , typename default_function_impl::state_param s 121 , typename default_function_impl::data_param d 122 ) const 123 { 124 return this->invoke(e, s, d, is_member_function_pointer<function_type>()); 125 } 126 private: invokedefault_function_impl127 result_type invoke( 128 typename default_function_impl::expr_param e 129 , typename default_function_impl::state_param s 130 , typename default_function_impl::data_param d 131 , mpl::false_ 132 ) const 133 { 134 return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )( 135 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) 136 ); 137 } invokedefault_function_impl138 result_type invoke( 139 typename default_function_impl::expr_param e 140 , typename default_function_impl::state_param s 141 , typename default_function_impl::data_param d 142 , mpl::true_ 143 ) const 144 { 145 BOOST_PROTO_USE_GET_POINTER(); 146 typedef typename detail::class_member_traits<function_type>::class_type class_type; 147 return ( 148 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->* 149 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d ) 150 )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d )); 151 } 152 }; 153 template<typename Grammar, typename Expr, typename State, typename Data> 154 struct default_function_impl<Grammar, Expr, State, Data, 6> 155 : transform_impl<Expr, State, Data> 156 { 157 typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2; typedef typename result_of::child_c< Expr, 3>::type e3; typedef typename Grammar::template impl<e3, State, Data>::result_type r3; typedef typename result_of::child_c< Expr, 4>::type e4; typedef typename Grammar::template impl<e4, State, Data>::result_type r4; typedef typename result_of::child_c< Expr, 5>::type e5; typedef typename Grammar::template impl<e5, State, Data>::result_type r5; 158 typedef 159 typename proto::detail::result_of_fixup<r0>::type 160 function_type; 161 typedef 162 typename BOOST_PROTO_RESULT_OF< 163 function_type(r1 , r2 , r3 , r4 , r5) 164 >::type 165 result_type; operator ()default_function_impl166 result_type operator ()( 167 typename default_function_impl::expr_param e 168 , typename default_function_impl::state_param s 169 , typename default_function_impl::data_param d 170 ) const 171 { 172 return this->invoke(e, s, d, is_member_function_pointer<function_type>()); 173 } 174 private: invokedefault_function_impl175 result_type invoke( 176 typename default_function_impl::expr_param e 177 , typename default_function_impl::state_param s 178 , typename default_function_impl::data_param d 179 , mpl::false_ 180 ) const 181 { 182 return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )( 183 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) 184 ); 185 } invokedefault_function_impl186 result_type invoke( 187 typename default_function_impl::expr_param e 188 , typename default_function_impl::state_param s 189 , typename default_function_impl::data_param d 190 , mpl::true_ 191 ) const 192 { 193 BOOST_PROTO_USE_GET_POINTER(); 194 typedef typename detail::class_member_traits<function_type>::class_type class_type; 195 return ( 196 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->* 197 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d ) 198 )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d )); 199 } 200 }; 201 template<typename Grammar, typename Expr, typename State, typename Data> 202 struct default_function_impl<Grammar, Expr, State, Data, 7> 203 : transform_impl<Expr, State, Data> 204 { 205 typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2; typedef typename result_of::child_c< Expr, 3>::type e3; typedef typename Grammar::template impl<e3, State, Data>::result_type r3; typedef typename result_of::child_c< Expr, 4>::type e4; typedef typename Grammar::template impl<e4, State, Data>::result_type r4; typedef typename result_of::child_c< Expr, 5>::type e5; typedef typename Grammar::template impl<e5, State, Data>::result_type r5; typedef typename result_of::child_c< Expr, 6>::type e6; typedef typename Grammar::template impl<e6, State, Data>::result_type r6; 206 typedef 207 typename proto::detail::result_of_fixup<r0>::type 208 function_type; 209 typedef 210 typename BOOST_PROTO_RESULT_OF< 211 function_type(r1 , r2 , r3 , r4 , r5 , r6) 212 >::type 213 result_type; operator ()default_function_impl214 result_type operator ()( 215 typename default_function_impl::expr_param e 216 , typename default_function_impl::state_param s 217 , typename default_function_impl::data_param d 218 ) const 219 { 220 return this->invoke(e, s, d, is_member_function_pointer<function_type>()); 221 } 222 private: invokedefault_function_impl223 result_type invoke( 224 typename default_function_impl::expr_param e 225 , typename default_function_impl::state_param s 226 , typename default_function_impl::data_param d 227 , mpl::false_ 228 ) const 229 { 230 return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )( 231 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d ) 232 ); 233 } invokedefault_function_impl234 result_type invoke( 235 typename default_function_impl::expr_param e 236 , typename default_function_impl::state_param s 237 , typename default_function_impl::data_param d 238 , mpl::true_ 239 ) const 240 { 241 BOOST_PROTO_USE_GET_POINTER(); 242 typedef typename detail::class_member_traits<function_type>::class_type class_type; 243 return ( 244 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->* 245 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d ) 246 )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d )); 247 } 248 }; 249 template<typename Grammar, typename Expr, typename State, typename Data> 250 struct default_function_impl<Grammar, Expr, State, Data, 8> 251 : transform_impl<Expr, State, Data> 252 { 253 typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2; typedef typename result_of::child_c< Expr, 3>::type e3; typedef typename Grammar::template impl<e3, State, Data>::result_type r3; typedef typename result_of::child_c< Expr, 4>::type e4; typedef typename Grammar::template impl<e4, State, Data>::result_type r4; typedef typename result_of::child_c< Expr, 5>::type e5; typedef typename Grammar::template impl<e5, State, Data>::result_type r5; typedef typename result_of::child_c< Expr, 6>::type e6; typedef typename Grammar::template impl<e6, State, Data>::result_type r6; typedef typename result_of::child_c< Expr, 7>::type e7; typedef typename Grammar::template impl<e7, State, Data>::result_type r7; 254 typedef 255 typename proto::detail::result_of_fixup<r0>::type 256 function_type; 257 typedef 258 typename BOOST_PROTO_RESULT_OF< 259 function_type(r1 , r2 , r3 , r4 , r5 , r6 , r7) 260 >::type 261 result_type; operator ()default_function_impl262 result_type operator ()( 263 typename default_function_impl::expr_param e 264 , typename default_function_impl::state_param s 265 , typename default_function_impl::data_param d 266 ) const 267 { 268 return this->invoke(e, s, d, is_member_function_pointer<function_type>()); 269 } 270 private: invokedefault_function_impl271 result_type invoke( 272 typename default_function_impl::expr_param e 273 , typename default_function_impl::state_param s 274 , typename default_function_impl::data_param d 275 , mpl::false_ 276 ) const 277 { 278 return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )( 279 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d ) , typename Grammar::template impl<e7, State, Data>()( proto::child_c< 7>( e), s, d ) 280 ); 281 } invokedefault_function_impl282 result_type invoke( 283 typename default_function_impl::expr_param e 284 , typename default_function_impl::state_param s 285 , typename default_function_impl::data_param d 286 , mpl::true_ 287 ) const 288 { 289 BOOST_PROTO_USE_GET_POINTER(); 290 typedef typename detail::class_member_traits<function_type>::class_type class_type; 291 return ( 292 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->* 293 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d ) 294 )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d ) , typename Grammar::template impl<e7, State, Data>()( proto::child_c< 7>( e), s, d )); 295 } 296 }; 297 template<typename Grammar, typename Expr, typename State, typename Data> 298 struct default_function_impl<Grammar, Expr, State, Data, 9> 299 : transform_impl<Expr, State, Data> 300 { 301 typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2; typedef typename result_of::child_c< Expr, 3>::type e3; typedef typename Grammar::template impl<e3, State, Data>::result_type r3; typedef typename result_of::child_c< Expr, 4>::type e4; typedef typename Grammar::template impl<e4, State, Data>::result_type r4; typedef typename result_of::child_c< Expr, 5>::type e5; typedef typename Grammar::template impl<e5, State, Data>::result_type r5; typedef typename result_of::child_c< Expr, 6>::type e6; typedef typename Grammar::template impl<e6, State, Data>::result_type r6; typedef typename result_of::child_c< Expr, 7>::type e7; typedef typename Grammar::template impl<e7, State, Data>::result_type r7; typedef typename result_of::child_c< Expr, 8>::type e8; typedef typename Grammar::template impl<e8, State, Data>::result_type r8; 302 typedef 303 typename proto::detail::result_of_fixup<r0>::type 304 function_type; 305 typedef 306 typename BOOST_PROTO_RESULT_OF< 307 function_type(r1 , r2 , r3 , r4 , r5 , r6 , r7 , r8) 308 >::type 309 result_type; operator ()default_function_impl310 result_type operator ()( 311 typename default_function_impl::expr_param e 312 , typename default_function_impl::state_param s 313 , typename default_function_impl::data_param d 314 ) const 315 { 316 return this->invoke(e, s, d, is_member_function_pointer<function_type>()); 317 } 318 private: invokedefault_function_impl319 result_type invoke( 320 typename default_function_impl::expr_param e 321 , typename default_function_impl::state_param s 322 , typename default_function_impl::data_param d 323 , mpl::false_ 324 ) const 325 { 326 return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )( 327 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d ) , typename Grammar::template impl<e7, State, Data>()( proto::child_c< 7>( e), s, d ) , typename Grammar::template impl<e8, State, Data>()( proto::child_c< 8>( e), s, d ) 328 ); 329 } invokedefault_function_impl330 result_type invoke( 331 typename default_function_impl::expr_param e 332 , typename default_function_impl::state_param s 333 , typename default_function_impl::data_param d 334 , mpl::true_ 335 ) const 336 { 337 BOOST_PROTO_USE_GET_POINTER(); 338 typedef typename detail::class_member_traits<function_type>::class_type class_type; 339 return ( 340 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->* 341 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d ) 342 )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d ) , typename Grammar::template impl<e7, State, Data>()( proto::child_c< 7>( e), s, d ) , typename Grammar::template impl<e8, State, Data>()( proto::child_c< 8>( e), s, d )); 343 } 344 }; 345 template<typename Grammar, typename Expr, typename State, typename Data> 346 struct default_function_impl<Grammar, Expr, State, Data, 10> 347 : transform_impl<Expr, State, Data> 348 { 349 typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2; typedef typename result_of::child_c< Expr, 3>::type e3; typedef typename Grammar::template impl<e3, State, Data>::result_type r3; typedef typename result_of::child_c< Expr, 4>::type e4; typedef typename Grammar::template impl<e4, State, Data>::result_type r4; typedef typename result_of::child_c< Expr, 5>::type e5; typedef typename Grammar::template impl<e5, State, Data>::result_type r5; typedef typename result_of::child_c< Expr, 6>::type e6; typedef typename Grammar::template impl<e6, State, Data>::result_type r6; typedef typename result_of::child_c< Expr, 7>::type e7; typedef typename Grammar::template impl<e7, State, Data>::result_type r7; typedef typename result_of::child_c< Expr, 8>::type e8; typedef typename Grammar::template impl<e8, State, Data>::result_type r8; typedef typename result_of::child_c< Expr, 9>::type e9; typedef typename Grammar::template impl<e9, State, Data>::result_type r9; 350 typedef 351 typename proto::detail::result_of_fixup<r0>::type 352 function_type; 353 typedef 354 typename BOOST_PROTO_RESULT_OF< 355 function_type(r1 , r2 , r3 , r4 , r5 , r6 , r7 , r8 , r9) 356 >::type 357 result_type; operator ()default_function_impl358 result_type operator ()( 359 typename default_function_impl::expr_param e 360 , typename default_function_impl::state_param s 361 , typename default_function_impl::data_param d 362 ) const 363 { 364 return this->invoke(e, s, d, is_member_function_pointer<function_type>()); 365 } 366 private: invokedefault_function_impl367 result_type invoke( 368 typename default_function_impl::expr_param e 369 , typename default_function_impl::state_param s 370 , typename default_function_impl::data_param d 371 , mpl::false_ 372 ) const 373 { 374 return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )( 375 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d ) , typename Grammar::template impl<e7, State, Data>()( proto::child_c< 7>( e), s, d ) , typename Grammar::template impl<e8, State, Data>()( proto::child_c< 8>( e), s, d ) , typename Grammar::template impl<e9, State, Data>()( proto::child_c< 9>( e), s, d ) 376 ); 377 } invokedefault_function_impl378 result_type invoke( 379 typename default_function_impl::expr_param e 380 , typename default_function_impl::state_param s 381 , typename default_function_impl::data_param d 382 , mpl::true_ 383 ) const 384 { 385 BOOST_PROTO_USE_GET_POINTER(); 386 typedef typename detail::class_member_traits<function_type>::class_type class_type; 387 return ( 388 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->* 389 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d ) 390 )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d ) , typename Grammar::template impl<e7, State, Data>()( proto::child_c< 7>( e), s, d ) , typename Grammar::template impl<e8, State, Data>()( proto::child_c< 8>( e), s, d ) , typename Grammar::template impl<e9, State, Data>()( proto::child_c< 9>( e), s, d )); 391 } 392 }; 393