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 namespace result_of 9 { 10 template <typename Expr 11 , typename A0 = void , typename A1 = void , typename A2 = void , typename A3 = void , typename A4 = void , typename A5 = void , typename A6 = void , typename A7 = void , typename A8 = void , typename A9 = void 12 , typename Dummy = void> 13 struct actor; 14 template <typename Expr> 15 struct nullary_actor_result 16 { 17 typedef 18 typename boost::phoenix::evaluator::impl< 19 Expr const& 20 , vector2< 21 vector1<const ::boost::phoenix::actor<Expr> *> & 22 , default_actions 23 > const & 24 , proto::empty_env 25 >::result_type 26 type; 27 }; 28 template <typename Expr> 29 struct actor<Expr> 30 { 31 typedef 32 33 typename mpl::eval_if_c< 34 result_of::is_nullary<Expr>::value 35 , nullary_actor_result<Expr> 36 , mpl::identity<detail::error_expecting_arguments> 37 >::type 38 type; 39 }; 40 41 42 43 44 45 46 47 template <typename Expr, typename A0> 48 struct actor<Expr, A0> 49 { 50 typedef 51 typename phoenix::evaluator:: 52 impl< 53 Expr const& 54 , vector2< 55 vector2<const ::boost::phoenix::actor<Expr> *, A0> & 56 , default_actions 57 > const & 58 , proto::empty_env 59 >::result_type 60 type; 61 }; 62 63 64 65 66 67 68 69 template <typename Expr, typename A0 , typename A1> 70 struct actor<Expr, A0 , A1> 71 { 72 typedef 73 typename phoenix::evaluator:: 74 impl< 75 Expr const& 76 , vector2< 77 vector3<const ::boost::phoenix::actor<Expr> *, A0 , A1> & 78 , default_actions 79 > const & 80 , proto::empty_env 81 >::result_type 82 type; 83 }; 84 85 86 87 88 89 90 91 template <typename Expr, typename A0 , typename A1 , typename A2> 92 struct actor<Expr, A0 , A1 , A2> 93 { 94 typedef 95 typename phoenix::evaluator:: 96 impl< 97 Expr const& 98 , vector2< 99 vector4<const ::boost::phoenix::actor<Expr> *, A0 , A1 , A2> & 100 , default_actions 101 > const & 102 , proto::empty_env 103 >::result_type 104 type; 105 }; 106 107 108 109 110 111 112 113 template <typename Expr, typename A0 , typename A1 , typename A2 , typename A3> 114 struct actor<Expr, A0 , A1 , A2 , A3> 115 { 116 typedef 117 typename phoenix::evaluator:: 118 impl< 119 Expr const& 120 , vector2< 121 vector5<const ::boost::phoenix::actor<Expr> *, A0 , A1 , A2 , A3> & 122 , default_actions 123 > const & 124 , proto::empty_env 125 >::result_type 126 type; 127 }; 128 129 130 131 132 133 134 135 template <typename Expr, typename A0 , typename A1 , typename A2 , typename A3 , typename A4> 136 struct actor<Expr, A0 , A1 , A2 , A3 , A4> 137 { 138 typedef 139 typename phoenix::evaluator:: 140 impl< 141 Expr const& 142 , vector2< 143 vector6<const ::boost::phoenix::actor<Expr> *, A0 , A1 , A2 , A3 , A4> & 144 , default_actions 145 > const & 146 , proto::empty_env 147 >::result_type 148 type; 149 }; 150 151 152 153 154 155 156 157 template <typename Expr, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5> 158 struct actor<Expr, A0 , A1 , A2 , A3 , A4 , A5> 159 { 160 typedef 161 typename phoenix::evaluator:: 162 impl< 163 Expr const& 164 , vector2< 165 vector7<const ::boost::phoenix::actor<Expr> *, A0 , A1 , A2 , A3 , A4 , A5> & 166 , default_actions 167 > const & 168 , proto::empty_env 169 >::result_type 170 type; 171 }; 172 173 174 175 176 177 178 179 template <typename Expr, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6> 180 struct actor<Expr, A0 , A1 , A2 , A3 , A4 , A5 , A6> 181 { 182 typedef 183 typename phoenix::evaluator:: 184 impl< 185 Expr const& 186 , vector2< 187 vector8<const ::boost::phoenix::actor<Expr> *, A0 , A1 , A2 , A3 , A4 , A5 , A6> & 188 , default_actions 189 > const & 190 , proto::empty_env 191 >::result_type 192 type; 193 }; 194 195 196 197 198 199 200 201 template <typename Expr, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7> 202 struct actor<Expr, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7> 203 { 204 typedef 205 typename phoenix::evaluator:: 206 impl< 207 Expr const& 208 , vector2< 209 vector9<const ::boost::phoenix::actor<Expr> *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7> & 210 , default_actions 211 > const & 212 , proto::empty_env 213 >::result_type 214 type; 215 }; 216 217 218 219 220 221 222 223 template <typename Expr, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8> 224 struct actor<Expr, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8> 225 { 226 typedef 227 typename phoenix::evaluator:: 228 impl< 229 Expr const& 230 , vector2< 231 vector10<const ::boost::phoenix::actor<Expr> *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8> & 232 , default_actions 233 > const & 234 , proto::empty_env 235 >::result_type 236 type; 237 }; 238 239 240 241 242 243 244 245 template <typename Expr, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9> 246 struct actor<Expr, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9> 247 { 248 typedef 249 typename phoenix::evaluator:: 250 impl< 251 Expr const& 252 , vector2< 253 vector11<const ::boost::phoenix::actor<Expr> *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9> & 254 , default_actions 255 > const & 256 , proto::empty_env 257 >::result_type 258 type; 259 }; 260 } 261