Ticket #11308: bind.patch
File bind.patch, 11.9 KB (added by , 7 years ago) |
---|
-
bind.hpp
29 29 #include <boost/bind/arg.hpp> 30 30 #include <boost/detail/workaround.hpp> 31 31 #include <boost/visit_each.hpp> 32 #include <boost/core/enable_if.hpp> 33 #include <boost/type_traits/is_same.hpp> 32 34 33 35 // Borland-specific bug, visit_each() silently fails to produce code 34 36 … … 1880 1882 #define BOOST_BIND_MF_NAME(X) X 1881 1883 #define BOOST_BIND_MF_CC 1882 1884 1885 1883 1886 #include <boost/bind/bind_mf_cc.hpp> 1884 1887 #include <boost/bind/bind_mf2_cc.hpp> 1885 1888 -
bind_mf_cc.hpp
36 36 37 37 template<class Rt2, class R, class T, 38 38 class A1> 39 _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf0)<R, T>, typename _bi::list_av_1<A1>::type> 39 typename disable_if<is_same<Rt2, R>, _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf0)<R, T>, typename _bi::list_av_1<A1>::type> >::type 40 40 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (), A1 a1) 41 41 { 42 42 typedef _mfi::BOOST_BIND_MF_NAME(mf0)<R, T> F; … … 46 46 47 47 template<class Rt2, class R, class T, 48 48 class A1> 49 _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T>, typename _bi::list_av_1<A1>::type>49 typename disable_if<is_same<Rt2, R>, _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T>, typename _bi::list_av_1<A1>::type> >::type 50 50 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () const, A1 a1) 51 51 { 52 52 typedef _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T> F; … … 81 81 template<class Rt2, class R, class T, 82 82 class B1, 83 83 class A1, class A2> 84 _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type>84 typename disable_if<is_same<Rt2, R>, _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type> >::type 85 85 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1), A1 a1, A2 a2) 86 86 { 87 87 typedef _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1> F; … … 92 92 template<class Rt2, class R, class T, 93 93 class B1, 94 94 class A1, class A2> 95 _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type>95 typename disable_if<is_same<Rt2, R>, _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type> >::type 96 96 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) const, A1 a1, A2 a2) 97 97 { 98 98 typedef _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1> F; … … 127 127 template<class Rt2, class R, class T, 128 128 class B1, class B2, 129 129 class A1, class A2, class A3> 130 _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type>130 typename disable_if<is_same<Rt2, R>, _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type> >::type 131 131 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2), A1 a1, A2 a2, A3 a3) 132 132 { 133 133 typedef _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2> F; … … 138 138 template<class Rt2, class R, class T, 139 139 class B1, class B2, 140 140 class A1, class A2, class A3> 141 _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type>141 typename disable_if<is_same<Rt2, R>, _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type> >::type 142 142 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) const, A1 a1, A2 a2, A3 a3) 143 143 { 144 144 typedef _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2> F; … … 173 173 template<class Rt2, class R, class T, 174 174 class B1, class B2, class B3, 175 175 class A1, class A2, class A3, class A4> 176 _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type>176 typename disable_if<is_same<Rt2, R>, _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type> >::type 177 177 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3), A1 a1, A2 a2, A3 a3, A4 a4) 178 178 { 179 179 typedef _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3> F; … … 184 184 template<class Rt2, class R, class T, 185 185 class B1, class B2, class B3, 186 186 class A1, class A2, class A3, class A4> 187 _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type>187 typename disable_if<is_same<Rt2, R>, _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type> >::type 188 188 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const, A1 a1, A2 a2, A3 a3, A4 a4) 189 189 { 190 190 typedef _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3> F; … … 219 219 template<class Rt2, class R, class T, 220 220 class B1, class B2, class B3, class B4, 221 221 class A1, class A2, class A3, class A4, class A5> 222 _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>222 typename disable_if<is_same<Rt2, R>, _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type> >::type 223 223 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) 224 224 { 225 225 typedef _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4> F; … … 230 230 template<class Rt2, class R, class T, 231 231 class B1, class B2, class B3, class B4, 232 232 class A1, class A2, class A3, class A4, class A5> 233 _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>233 typename disable_if<is_same<Rt2, R>, _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type> >::type 234 234 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) 235 235 { 236 236 typedef _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4> F; … … 265 265 template<class Rt2, class R, class T, 266 266 class B1, class B2, class B3, class B4, class B5, 267 267 class A1, class A2, class A3, class A4, class A5, class A6> 268 _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>268 typename disable_if<is_same<Rt2, R>, _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type> >::type 269 269 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) 270 270 { 271 271 typedef _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5> F; … … 276 276 template<class Rt2, class R, class T, 277 277 class B1, class B2, class B3, class B4, class B5, 278 278 class A1, class A2, class A3, class A4, class A5, class A6> 279 _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>279 typename disable_if<is_same<Rt2, R>, _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type> >::type 280 280 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) 281 281 { 282 282 typedef _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5> F; … … 311 311 template<class Rt2, class R, class T, 312 312 class B1, class B2, class B3, class B4, class B5, class B6, 313 313 class A1, class A2, class A3, class A4, class A5, class A6, class A7> 314 _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>314 typename disable_if<is_same<Rt2, R>, _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type> >::type 315 315 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) 316 316 { 317 317 typedef _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6> F; … … 322 322 template<class Rt2, class R, class T, 323 323 class B1, class B2, class B3, class B4, class B5, class B6, 324 324 class A1, class A2, class A3, class A4, class A5, class A6, class A7> 325 _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>325 typename disable_if<is_same<Rt2, R>, _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type> >::type 326 326 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) 327 327 { 328 328 typedef _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6> F; … … 357 357 template<class Rt2, class R, class T, 358 358 class B1, class B2, class B3, class B4, class B5, class B6, class B7, 359 359 class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> 360 _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>360 typename disable_if<is_same<Rt2, R>, _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type> >::type 361 361 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) 362 362 { 363 363 typedef _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F; … … 368 368 template<class Rt2, class R, class T, 369 369 class B1, class B2, class B3, class B4, class B5, class B6, class B7, 370 370 class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> 371 _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>371 typename disable_if<is_same<Rt2, R>, _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type> >::type 372 372 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) 373 373 { 374 374 typedef _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F; … … 403 403 template<class Rt2, class R, class T, 404 404 class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, 405 405 class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> 406 _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>406 typename disable_if<is_same<Rt2, R>, _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type> >::type 407 407 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) 408 408 { 409 409 typedef _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F; … … 414 414 template<class Rt2, class R, class T, 415 415 class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, 416 416 class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> 417 _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>417 typename disable_if<is_same<Rt2, R>, _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type> >::type 418 418 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) 419 419 { 420 420 typedef _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F;