
Hi Peeps I have this cut down code example #include <vector> #include <map> #include <algorithm> #include <boost/shared_ptr.hpp> #include <boost/lambda/lambda.hpp> #include <boost/lambda/bind.hpp> template < typename Iter, typename Pred > bool any_of_if( Iter first, Iter last, Pred pred ) { return std :: find_if( first, last, pred ) != last; } struct A { }; bool fnOfA( const A & ); typedef std :: vector< boost :: shared_ptr< A > > VecOfPtr; typedef std :: map< int, VecOfPtr > MapOfVecOfPtr; bool contains_if( const VecOfPtr &, bool ( * pred )( const VecOfPtr :: value_type :: value_type &) ); bool f( const boost :: shared_ptr< MapOfVecOfPtr > & myMap ) { using namespace boost; return any_of_if( myMap -> begin( ), myMap -> end( ), lambda :: bind( contains_if, lambda :: bind( & MapOfVecOfPtr :: value_type :: second, lambda :: _1 ), fnOfA ) ); } This compiles under gcc (3.4.4), but under Vis Studio 2008 gives a huge error message, (attached), but summarised as boost\boost/tuple/detail/tuple_basic.hpp(439) : error C2664: 'boost::tuples::detail::non_storeable_type<T>::non_storeable_type(const boost::tuples::detail::non_storeable_type<T> &)' : cannot convert parameter 1 from 'bool (__cdecl &)(const A &)' to 'const boost::tuples::detail::non_storeable_type<T> &' It also goes away if I introduce a temporary local variable for fnOfA. Is this a know bug in VisStudio or Boost, possibly with a known solution? Thanks, - Rob.