
Hi, This is with RHEL, gcc version 3.4.6. I *think* the boost version is 1.32.0. -bash-3.00$ gcc -v Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.6/specs Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk --host=i386-redhat-linux Thread model: posix gcc version 3.4.6 20060404 (Red Hat 3.4.6-8) -bash-3.00$ The complete mini program I use is: [code] #include <map> #include <boost/bind.hpp> #include <boost/shared_ptr.hpp> class A { public: void reset() {} }; typedef boost::shared_ptr<A> ptr_type; typedef std::map<int,ptr_type> map_type; map_type m; int main() { m[1] = ptr_type(new A()); m[2] = ptr_type(new A()); for_each (m.begin(), m.end(), boost::bind(&A::reset, boost::bind(&map_type::value_type::second, _1))); return 0; } [/code] The following is the compiler error received: [output] -bash-3.00$ g++ -o tc tc.cpp /usr/include/boost/bind.hpp: In member function `void boost::_bi::list1<A1>::operator()(boost::_bi::type<void>, F&, A&, int) [with F = boost::_mfi::mf0<void, A>, A = boost::_bi::list1<std::pair<const int, ptr_type>&>, A1 = boost::_bi::bind_t<ptr_type, boost::_mfi::dm<ptr_type, std::pair<const int, ptr_type> >, boost::_bi::list1<boost::arg<1> > >]': /usr/include/boost/bind/bind_template.hpp:32: instantiated from `typename boost::_bi::result_traits<R, F>::type boost::_bi::bind_t<R, F, L>::operator()(A1&) [with A1 = std::pair<const int, ptr_type>, R = void, F = boost::_mfi::mf0<void, A>, L = boost::_bi::list1<boost::_bi::bind_t<ptr_type, boost::_mfi::dm<ptr_type, std::pair<const int, ptr_type> >, boost::_bi::list1<boost::arg<1> > > >]' /usr/lib/gcc/i386-redhat-linux/3.4.6/../../../../include/c++/3.4.6/bits/stl_algo.h:158: instantiated from `_Function std::for_each(_InputIterator, _InputIterator, _Function) [with _InputIterator = std::_Rb_tree_iterator<std::pair<const int, ptr_type> >, _Function = boost::_bi::bind_t<void, boost::_mfi::mf0<void, A>, boost::_bi::list1<boost::_bi::bind_t<ptr_type, boost::_mfi::dm<ptr_type, std::pair<const int, ptr_type> >, boost::_bi::list1<boost::arg<1> > > > >]' tc.cpp:24: instantiated from here /usr/include/boost/bind.hpp:228: error: no match for call to `(boost::_mfi::mf0<void, A>) (ptr_type)' /usr/include/boost/bind/mem_fn_template.hpp:44: note: candidates are: R boost::_mfi::mf0<R, T>::operator()(T*) const [with R = void, T = A] /usr/include/boost/bind/mem_fn_template.hpp:49: note: R boost::_mfi::mf0<R, T>::operator()(U&) const [with U = ptr_type, R = void, T = A] /usr/include/boost/bind/mem_fn_template.hpp:54: note: R boost::_mfi::mf0<R, T>::operator()(T&) const [with R = void, T = A] -bash-3.00$ [/output] Anyway, since it works on VC7.1 I imagine that it was fixed in some later version of the library. Thanks, --Kevin On Wed, Mar 4, 2009 at 11:49 AM, Peter Dimov <pdimov@pdimov.com> wrote:
Kevin Ludwig:
Hi,
I've recently been making more use of boost::bind, and I coded the following, which I thought would work:
class A { public: void reset () {} }; typedef std::map<int, boost::shared_ptr<A> > map_type; map_type m; std::for_each (m.begin(), m.end(), boost::bind(&A::reset, boost::bind(&map_type::value_type::second, _1)));
but fails to compile.
This compiles for me with MSVC 7.1. What compiler and Boost version do you use? What errors do you get? _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
-- Kevin