1 /*============================================================================== 2 Copyright (c) 2005-2010 Joel de Guzman 3 Copyright (c) 2010 Thomas Heller 4 5 Distributed under the Boost Software License, Version 1.0. (See accompanying 6 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 7 ==============================================================================*/ 8 9 10 11 12 13 14 15 template <typename This, typename A0 , typename A1, typename Context> 16 struct result<This(A0 , A1, Context)> 17 { 18 typedef 19 typename proto::detail::uncvref< 20 typename proto::result_of::value<A0>::type 21 >::type 22 target_type; 23 typedef typename target_type::type construct_type; 24 typedef typename target_type::type * type; 25 }; 26 template <typename A0 , typename A1, typename Context> 27 typename result<new_eval(A0 const& , A1 const&, Context &)>::type operator ()(A0 const &,A1 const & a1,Context const & ctx) const28 operator()( 29 A0 const& 30 , A1 const& a1 31 , Context const & ctx 32 ) const 33 { 34 return 35 new typename result< 36 new_eval(A0 const& , A1 const&, Context &) 37 >::construct_type( 38 boost::phoenix::eval(a1, ctx) 39 ); 40 } 41 42 43 44 45 46 47 48 template <typename This, typename A0 , typename A1 , typename A2, typename Context> 49 struct result<This(A0 , A1 , A2, Context)> 50 { 51 typedef 52 typename proto::detail::uncvref< 53 typename proto::result_of::value<A0>::type 54 >::type 55 target_type; 56 typedef typename target_type::type construct_type; 57 typedef typename target_type::type * type; 58 }; 59 template <typename A0 , typename A1 , typename A2, typename Context> 60 typename result<new_eval(A0 const& , A1 const& , A2 const&, Context &)>::type operator ()(A0 const &,A1 const & a1,A2 const & a2,Context const & ctx) const61 operator()( 62 A0 const& 63 , A1 const& a1 , A2 const& a2 64 , Context const & ctx 65 ) const 66 { 67 return 68 new typename result< 69 new_eval(A0 const& , A1 const& , A2 const&, Context &) 70 >::construct_type( 71 boost::phoenix::eval(a1, ctx) , boost::phoenix::eval(a2, ctx) 72 ); 73 } 74 75 76 77 78 79 80 81 template <typename This, typename A0 , typename A1 , typename A2 , typename A3, typename Context> 82 struct result<This(A0 , A1 , A2 , A3, Context)> 83 { 84 typedef 85 typename proto::detail::uncvref< 86 typename proto::result_of::value<A0>::type 87 >::type 88 target_type; 89 typedef typename target_type::type construct_type; 90 typedef typename target_type::type * type; 91 }; 92 template <typename A0 , typename A1 , typename A2 , typename A3, typename Context> 93 typename result<new_eval(A0 const& , A1 const& , A2 const& , A3 const&, Context &)>::type operator ()(A0 const &,A1 const & a1,A2 const & a2,A3 const & a3,Context const & ctx) const94 operator()( 95 A0 const& 96 , A1 const& a1 , A2 const& a2 , A3 const& a3 97 , Context const & ctx 98 ) const 99 { 100 return 101 new typename result< 102 new_eval(A0 const& , A1 const& , A2 const& , A3 const&, Context &) 103 >::construct_type( 104 boost::phoenix::eval(a1, ctx) , boost::phoenix::eval(a2, ctx) , boost::phoenix::eval(a3, ctx) 105 ); 106 } 107 108 109 110 111 112 113 114 template <typename This, typename A0 , typename A1 , typename A2 , typename A3 , typename A4, typename Context> 115 struct result<This(A0 , A1 , A2 , A3 , A4, Context)> 116 { 117 typedef 118 typename proto::detail::uncvref< 119 typename proto::result_of::value<A0>::type 120 >::type 121 target_type; 122 typedef typename target_type::type construct_type; 123 typedef typename target_type::type * type; 124 }; 125 template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4, typename Context> 126 typename result<new_eval(A0 const& , A1 const& , A2 const& , A3 const& , A4 const&, Context &)>::type operator ()(A0 const &,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,Context const & ctx) const127 operator()( 128 A0 const& 129 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 130 , Context const & ctx 131 ) const 132 { 133 return 134 new typename result< 135 new_eval(A0 const& , A1 const& , A2 const& , A3 const& , A4 const&, Context &) 136 >::construct_type( 137 boost::phoenix::eval(a1, ctx) , boost::phoenix::eval(a2, ctx) , boost::phoenix::eval(a3, ctx) , boost::phoenix::eval(a4, ctx) 138 ); 139 } 140 141 142 143 144 145 146 147 template <typename This, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5, typename Context> 148 struct result<This(A0 , A1 , A2 , A3 , A4 , A5, Context)> 149 { 150 typedef 151 typename proto::detail::uncvref< 152 typename proto::result_of::value<A0>::type 153 >::type 154 target_type; 155 typedef typename target_type::type construct_type; 156 typedef typename target_type::type * type; 157 }; 158 template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5, typename Context> 159 typename result<new_eval(A0 const& , A1 const& , A2 const& , A3 const& , A4 const& , A5 const&, Context &)>::type operator ()(A0 const &,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5,Context const & ctx) const160 operator()( 161 A0 const& 162 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 163 , Context const & ctx 164 ) const 165 { 166 return 167 new typename result< 168 new_eval(A0 const& , A1 const& , A2 const& , A3 const& , A4 const& , A5 const&, Context &) 169 >::construct_type( 170 boost::phoenix::eval(a1, ctx) , boost::phoenix::eval(a2, ctx) , boost::phoenix::eval(a3, ctx) , boost::phoenix::eval(a4, ctx) , boost::phoenix::eval(a5, ctx) 171 ); 172 } 173 174 175 176 177 178 179 180 template <typename This, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6, typename Context> 181 struct result<This(A0 , A1 , A2 , A3 , A4 , A5 , A6, Context)> 182 { 183 typedef 184 typename proto::detail::uncvref< 185 typename proto::result_of::value<A0>::type 186 >::type 187 target_type; 188 typedef typename target_type::type construct_type; 189 typedef typename target_type::type * type; 190 }; 191 template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6, typename Context> 192 typename result<new_eval(A0 const& , A1 const& , A2 const& , A3 const& , A4 const& , A5 const& , A6 const&, Context &)>::type operator ()(A0 const &,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5,A6 const & a6,Context const & ctx) const193 operator()( 194 A0 const& 195 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 196 , Context const & ctx 197 ) const 198 { 199 return 200 new typename result< 201 new_eval(A0 const& , A1 const& , A2 const& , A3 const& , A4 const& , A5 const& , A6 const&, Context &) 202 >::construct_type( 203 boost::phoenix::eval(a1, ctx) , boost::phoenix::eval(a2, ctx) , boost::phoenix::eval(a3, ctx) , boost::phoenix::eval(a4, ctx) , boost::phoenix::eval(a5, ctx) , boost::phoenix::eval(a6, ctx) 204 ); 205 } 206 207 208 209 210 211 212 213 template <typename This, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7, typename Context> 214 struct result<This(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7, Context)> 215 { 216 typedef 217 typename proto::detail::uncvref< 218 typename proto::result_of::value<A0>::type 219 >::type 220 target_type; 221 typedef typename target_type::type construct_type; 222 typedef typename target_type::type * type; 223 }; 224 template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7, typename Context> 225 typename result<new_eval(A0 const& , A1 const& , A2 const& , A3 const& , A4 const& , A5 const& , A6 const& , A7 const&, Context &)>::type operator ()(A0 const &,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5,A6 const & a6,A7 const & a7,Context const & ctx) const226 operator()( 227 A0 const& 228 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 229 , Context const & ctx 230 ) const 231 { 232 return 233 new typename result< 234 new_eval(A0 const& , A1 const& , A2 const& , A3 const& , A4 const& , A5 const& , A6 const& , A7 const&, Context &) 235 >::construct_type( 236 boost::phoenix::eval(a1, ctx) , boost::phoenix::eval(a2, ctx) , boost::phoenix::eval(a3, ctx) , boost::phoenix::eval(a4, ctx) , boost::phoenix::eval(a5, ctx) , boost::phoenix::eval(a6, ctx) , boost::phoenix::eval(a7, ctx) 237 ); 238 } 239 240 241 242 243 244 245 246 template <typename This, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8, typename Context> 247 struct result<This(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8, Context)> 248 { 249 typedef 250 typename proto::detail::uncvref< 251 typename proto::result_of::value<A0>::type 252 >::type 253 target_type; 254 typedef typename target_type::type construct_type; 255 typedef typename target_type::type * type; 256 }; 257 template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8, typename Context> 258 typename result<new_eval(A0 const& , A1 const& , A2 const& , A3 const& , A4 const& , A5 const& , A6 const& , A7 const& , A8 const&, Context &)>::type operator ()(A0 const &,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5,A6 const & a6,A7 const & a7,A8 const & a8,Context const & ctx) const259 operator()( 260 A0 const& 261 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 262 , Context const & ctx 263 ) const 264 { 265 return 266 new typename result< 267 new_eval(A0 const& , A1 const& , A2 const& , A3 const& , A4 const& , A5 const& , A6 const& , A7 const& , A8 const&, Context &) 268 >::construct_type( 269 boost::phoenix::eval(a1, ctx) , boost::phoenix::eval(a2, ctx) , boost::phoenix::eval(a3, ctx) , boost::phoenix::eval(a4, ctx) , boost::phoenix::eval(a5, ctx) , boost::phoenix::eval(a6, ctx) , boost::phoenix::eval(a7, ctx) , boost::phoenix::eval(a8, ctx) 270 ); 271 } 272 273 274 275 276 277 278 279 template <typename This, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9, typename Context> 280 struct result<This(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9, Context)> 281 { 282 typedef 283 typename proto::detail::uncvref< 284 typename proto::result_of::value<A0>::type 285 >::type 286 target_type; 287 typedef typename target_type::type construct_type; 288 typedef typename target_type::type * type; 289 }; 290 template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9, typename Context> 291 typename result<new_eval(A0 const& , A1 const& , A2 const& , A3 const& , A4 const& , A5 const& , A6 const& , A7 const& , A8 const& , A9 const&, Context &)>::type operator ()(A0 const &,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5,A6 const & a6,A7 const & a7,A8 const & a8,A9 const & a9,Context const & ctx) const292 operator()( 293 A0 const& 294 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 295 , Context const & ctx 296 ) const 297 { 298 return 299 new typename result< 300 new_eval(A0 const& , A1 const& , A2 const& , A3 const& , A4 const& , A5 const& , A6 const& , A7 const& , A8 const& , A9 const&, Context &) 301 >::construct_type( 302 boost::phoenix::eval(a1, ctx) , boost::phoenix::eval(a2, ctx) , boost::phoenix::eval(a3, ctx) , boost::phoenix::eval(a4, ctx) , boost::phoenix::eval(a5, ctx) , boost::phoenix::eval(a6, ctx) , boost::phoenix::eval(a7, ctx) , boost::phoenix::eval(a8, ctx) , boost::phoenix::eval(a9, ctx) 303 ); 304 } 305