diff --git a/include/boost/bind.hpp b/include/boost/bind.hpp index 42ede32..f59c9ca 100644 --- a/include/boost/bind.hpp +++ b/include/boost/bind.hpp @@ -146,6 +146,8 @@ public: A1 operator[] (arg<1>) const { return a1_; } + A1 operator[] (arg<1> (*) ()) const { return a1_; } + template T & operator[] (value & v) const { return v.get(); } template T const & operator[] (value const & v) const { return v.get(); } @@ -191,6 +193,9 @@ public: A1 operator[] (arg<1>) const { return a1_; } A2 operator[] (arg<2>) const { return a2_; } + A1 operator[] (arg<1> (*) ()) const { return a1_; } + A2 operator[] (arg<2> (*) ()) const { return a2_; } + template T & operator[] (value & v) const { return v.get(); } template T const & operator[] (value const & v) const { return v.get(); } @@ -239,6 +244,10 @@ public: A2 operator[] (arg<2>) const { return a2_; } A3 operator[] (arg<3>) const { return a3_; } + A1 operator[] (arg<1> (*) ()) const { return a1_; } + A2 operator[] (arg<2> (*) ()) const { return a2_; } + A3 operator[] (arg<3> (*) ()) const { return a3_; } + template T & operator[] (value & v) const { return v.get(); } template T const & operator[] (value const & v) const { return v.get(); } @@ -290,6 +299,11 @@ public: A3 operator[] (arg<3>) const { return a3_; } A4 operator[] (arg<4>) const { return a4_; } + A1 operator[] (arg<1> (*) ()) const { return a1_; } + A2 operator[] (arg<2> (*) ()) const { return a2_; } + A3 operator[] (arg<3> (*) ()) const { return a3_; } + A4 operator[] (arg<4> (*) ()) const { return a4_; } + template T & operator[] (value & v) const { return v.get(); } template T const & operator[] (value const & v) const { return v.get(); } @@ -344,6 +358,12 @@ public: A4 operator[] (arg<4>) const { return a4_; } A5 operator[] (arg<5>) const { return a5_; } + A1 operator[] (arg<1> (*) ()) const { return a1_; } + A2 operator[] (arg<2> (*) ()) const { return a2_; } + A3 operator[] (arg<3> (*) ()) const { return a3_; } + A4 operator[] (arg<4> (*) ()) const { return a4_; } + A5 operator[] (arg<5> (*) ()) const { return a5_; } + template T & operator[] (value & v) const { return v.get(); } template T const & operator[] (value const & v) const { return v.get(); } @@ -401,6 +421,13 @@ public: A5 operator[] (arg<5>) const { return a5_; } A6 operator[] (arg<6>) const { return a6_; } + A1 operator[] (arg<1> (*) ()) const { return a1_; } + A2 operator[] (arg<2> (*) ()) const { return a2_; } + A3 operator[] (arg<3> (*) ()) const { return a3_; } + A4 operator[] (arg<4> (*) ()) const { return a4_; } + A5 operator[] (arg<5> (*) ()) const { return a5_; } + A6 operator[] (arg<6> (*) ()) const { return a6_; } + template T & operator[] (value & v) const { return v.get(); } template T const & operator[] (value const & v) const { return v.get(); } @@ -461,6 +488,14 @@ public: A6 operator[] (arg<6>) const { return a6_; } A7 operator[] (arg<7>) const { return a7_; } + A1 operator[] (arg<1> (*) ()) const { return a1_; } + A2 operator[] (arg<2> (*) ()) const { return a2_; } + A3 operator[] (arg<3> (*) ()) const { return a3_; } + A4 operator[] (arg<4> (*) ()) const { return a4_; } + A5 operator[] (arg<5> (*) ()) const { return a5_; } + A6 operator[] (arg<6> (*) ()) const { return a6_; } + A7 operator[] (arg<7> (*) ()) const { return a7_; } + template T & operator[] (value & v) const { return v.get(); } template T const & operator[] (value const & v) const { return v.get(); } @@ -524,6 +559,15 @@ public: A7 operator[] (arg<7>) const { return a7_; } A8 operator[] (arg<8>) const { return a8_; } + A1 operator[] (arg<1> (*) ()) const { return a1_; } + A2 operator[] (arg<2> (*) ()) const { return a2_; } + A3 operator[] (arg<3> (*) ()) const { return a3_; } + A4 operator[] (arg<4> (*) ()) const { return a4_; } + A5 operator[] (arg<5> (*) ()) const { return a5_; } + A6 operator[] (arg<6> (*) ()) const { return a6_; } + A7 operator[] (arg<7> (*) ()) const { return a7_; } + A8 operator[] (arg<8> (*) ()) const { return a8_; } + template T & operator[] (value & v) const { return v.get(); } template T const & operator[] (value const & v) const { return v.get(); } @@ -590,6 +634,16 @@ public: A8 operator[] (arg<8>) const { return a8_; } A9 operator[] (arg<9>) const { return a9_; } + A1 operator[] (arg<1> (*) ()) const { return a1_; } + A2 operator[] (arg<2> (*) ()) const { return a2_; } + A3 operator[] (arg<3> (*) ()) const { return a3_; } + A4 operator[] (arg<4> (*) ()) const { return a4_; } + A5 operator[] (arg<5> (*) ()) const { return a5_; } + A6 operator[] (arg<6> (*) ()) const { return a6_; } + A7 operator[] (arg<7> (*) ()) const { return a7_; } + A8 operator[] (arg<8> (*) ()) const { return a8_; } + A9 operator[] (arg<9> (*) ()) const { return a9_; } + template T & operator[] (value & v) const { return v.get(); } template T const & operator[] (value const & v) const { return v.get(); } @@ -916,6 +970,11 @@ template struct add_value< arg > typedef arg type; }; +template struct add_value< arg (*) () > +{ + typedef arg (*type) (); +}; + template struct add_value< bind_t > { typedef bind_t type; @@ -947,6 +1006,7 @@ typedef char (&_avt_r2) [2]; template _avt_r1 _avt_f(value); template _avt_r1 _avt_f(reference_wrapper); template _avt_r1 _avt_f(arg); +template _avt_r1 _avt_f(arg (*) ()); template _avt_r1 _avt_f(bind_t); _avt_r2 _avt_f(...); diff --git a/include/boost/bind/placeholders.hpp b/include/boost/bind/placeholders.hpp index c902e0c..0121330 100644 --- a/include/boost/bind/placeholders.hpp +++ b/include/boost/bind/placeholders.hpp @@ -19,31 +19,20 @@ // #include -#include - -// With MSVC precompiled headers, unnamed namespaces are not unique - -#ifdef BOOST_MSVC -# define BOOST_BIND_STATIC static -#else -# define BOOST_BIND_STATIC -#endif namespace { -BOOST_BIND_STATIC boost::arg<1> _1; -BOOST_BIND_STATIC boost::arg<2> _2; -BOOST_BIND_STATIC boost::arg<3> _3; -BOOST_BIND_STATIC boost::arg<4> _4; -BOOST_BIND_STATIC boost::arg<5> _5; -BOOST_BIND_STATIC boost::arg<6> _6; -BOOST_BIND_STATIC boost::arg<7> _7; -BOOST_BIND_STATIC boost::arg<8> _8; -BOOST_BIND_STATIC boost::arg<9> _9; +static inline boost::arg<1> _1() { return boost::arg<1>(); } +static inline boost::arg<2> _2() { return boost::arg<2>(); } +static inline boost::arg<3> _3() { return boost::arg<3>(); } +static inline boost::arg<4> _4() { return boost::arg<4>(); } +static inline boost::arg<5> _5() { return boost::arg<5>(); } +static inline boost::arg<6> _6() { return boost::arg<6>(); } +static inline boost::arg<7> _7() { return boost::arg<7>(); } +static inline boost::arg<8> _8() { return boost::arg<8>(); } +static inline boost::arg<9> _9() { return boost::arg<9>(); } } // unnamed namespace -#undef BOOST_BIND_STATIC - #endif // #ifndef BOOST_BIND_PLACEHOLDERS_HPP_INCLUDED