1 2 // Copyright Peter Dimov 2001 3 // Copyright Aleksey Gurtovoy 2001-2004 4 // 5 // Distributed under the Boost Software License, Version 1.0. 6 // (See accompanying file LICENSE_1_0.txt or copy at 7 // http://www.boost.org/LICENSE_1_0.txt) 8 // 9 10 // Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header 11 // -- DO NOT modify by hand! 12 13 namespace boost { namespace mpl { 14 15 namespace aux { 16 template< bool > 17 struct resolve_arg_impl 18 { 19 template< 20 typename T, typename U1, typename U2, typename U3 21 , typename U4, typename U5 22 > 23 struct result_ 24 { 25 typedef T type; 26 }; 27 }; 28 29 template<> 30 struct resolve_arg_impl<true> 31 { 32 template< 33 typename T, typename U1, typename U2, typename U3 34 , typename U4, typename U5 35 > 36 struct result_ 37 { 38 typedef typename apply_wrap5< 39 T 40 , U1, U2, U3, U4, U5 41 >::type type; 42 }; 43 }; 44 45 template< typename T > struct is_bind_template; 46 47 template< 48 typename T, typename U1, typename U2, typename U3, typename U4 49 , typename U5 50 > 51 struct resolve_bind_arg 52 : resolve_arg_impl< is_bind_template<T>::value > 53 ::template result_< T,U1,U2,U3,U4,U5 > 54 { 55 }; 56 57 template< int arity_ > struct bind_chooser; 58 59 aux::no_tag is_bind_helper(...); 60 template< typename T > aux::no_tag is_bind_helper(protect<T>*); 61 62 template< int N > 63 aux::yes_tag is_bind_helper(arg<N>*); 64 65 template< bool is_ref_ = true > 66 struct is_bind_template_impl 67 { 68 template< typename T > struct result_ 69 { 70 BOOST_STATIC_CONSTANT(bool, value = false); 71 }; 72 }; 73 74 template<> 75 struct is_bind_template_impl<false> 76 { 77 template< typename T > struct result_ 78 { 79 BOOST_STATIC_CONSTANT(bool, value = 80 sizeof(aux::is_bind_helper(static_cast<T*>(0))) 81 == sizeof(aux::yes_tag) 82 ); 83 }; 84 }; 85 86 template< typename T > struct is_bind_template 87 : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value > 88 ::template result_<T> 89 { 90 }; 91 92 } // namespace aux 93 94 template< 95 typename F 96 > 97 struct bind0 98 { 99 template< 100 typename U1 = na, typename U2 = na, typename U3 = na 101 , typename U4 = na, typename U5 = na 102 > 103 struct apply 104 { 105 private: 106 typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; 107 108 public: 109 typedef typename apply_wrap0< 110 f_ 111 >::type type; 112 113 }; 114 }; 115 116 namespace aux { 117 118 template< 119 typename F 120 > 121 aux::yes_tag 122 is_bind_helper(bind0<F>*); 123 124 } // namespace aux 125 126 BOOST_MPL_AUX_ARITY_SPEC(1, bind0) 127 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) 128 129 template< 130 typename F, typename T1 131 > 132 struct bind1 133 { 134 template< 135 typename U1 = na, typename U2 = na, typename U3 = na 136 , typename U4 = na, typename U5 = na 137 > 138 struct apply 139 { 140 private: 141 typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; 142 typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; 143 144 public: 145 typedef typename apply_wrap1< 146 f_ 147 , typename t1::type 148 >::type type; 149 150 }; 151 }; 152 153 namespace aux { 154 155 template< 156 typename F, typename T1 157 > 158 aux::yes_tag 159 is_bind_helper(bind1< F,T1 >*); 160 161 } // namespace aux 162 163 BOOST_MPL_AUX_ARITY_SPEC(2, bind1) 164 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) 165 166 template< 167 typename F, typename T1, typename T2 168 > 169 struct bind2 170 { 171 template< 172 typename U1 = na, typename U2 = na, typename U3 = na 173 , typename U4 = na, typename U5 = na 174 > 175 struct apply 176 { 177 private: 178 typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; 179 typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; 180 typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; 181 182 public: 183 typedef typename apply_wrap2< 184 f_ 185 , typename t1::type, typename t2::type 186 >::type type; 187 188 }; 189 }; 190 191 namespace aux { 192 193 template< 194 typename F, typename T1, typename T2 195 > 196 aux::yes_tag 197 is_bind_helper(bind2< F,T1,T2 >*); 198 199 } // namespace aux 200 201 BOOST_MPL_AUX_ARITY_SPEC(3, bind2) 202 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) 203 204 template< 205 typename F, typename T1, typename T2, typename T3 206 > 207 struct bind3 208 { 209 template< 210 typename U1 = na, typename U2 = na, typename U3 = na 211 , typename U4 = na, typename U5 = na 212 > 213 struct apply 214 { 215 private: 216 typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; 217 typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; 218 typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; 219 typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; 220 221 public: 222 typedef typename apply_wrap3< 223 f_ 224 , typename t1::type, typename t2::type, typename t3::type 225 >::type type; 226 227 }; 228 }; 229 230 namespace aux { 231 232 template< 233 typename F, typename T1, typename T2, typename T3 234 > 235 aux::yes_tag 236 is_bind_helper(bind3< F,T1,T2,T3 >*); 237 238 } // namespace aux 239 240 BOOST_MPL_AUX_ARITY_SPEC(4, bind3) 241 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) 242 243 template< 244 typename F, typename T1, typename T2, typename T3, typename T4 245 > 246 struct bind4 247 { 248 template< 249 typename U1 = na, typename U2 = na, typename U3 = na 250 , typename U4 = na, typename U5 = na 251 > 252 struct apply 253 { 254 private: 255 typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; 256 typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; 257 typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; 258 typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; 259 typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; 260 261 public: 262 typedef typename apply_wrap4< 263 f_ 264 , typename t1::type, typename t2::type, typename t3::type 265 , typename t4::type 266 >::type type; 267 268 }; 269 }; 270 271 namespace aux { 272 273 template< 274 typename F, typename T1, typename T2, typename T3, typename T4 275 > 276 aux::yes_tag 277 is_bind_helper(bind4< F,T1,T2,T3,T4 >*); 278 279 } // namespace aux 280 281 BOOST_MPL_AUX_ARITY_SPEC(5, bind4) 282 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) 283 284 template< 285 typename F, typename T1, typename T2, typename T3, typename T4 286 , typename T5 287 > 288 struct bind5 289 { 290 template< 291 typename U1 = na, typename U2 = na, typename U3 = na 292 , typename U4 = na, typename U5 = na 293 > 294 struct apply 295 { 296 private: 297 typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; 298 typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; 299 typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; 300 typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; 301 typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; 302 typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5; 303 304 public: 305 typedef typename apply_wrap5< 306 f_ 307 , typename t1::type, typename t2::type, typename t3::type 308 , typename t4::type, typename t5::type 309 >::type type; 310 311 }; 312 }; 313 314 namespace aux { 315 316 template< 317 typename F, typename T1, typename T2, typename T3, typename T4 318 , typename T5 319 > 320 aux::yes_tag 321 is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*); 322 323 } // namespace aux 324 325 BOOST_MPL_AUX_ARITY_SPEC(6, bind5) 326 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) 327 }} 328 329