#include #include struct abstract_t { virtual ~abstract_t() {} virtual void do_it() const = 0; }; struct concrete_t :public abstract_t { virtual ~concrete_t() {} virtual void do_it() const {} }; void handle_an_abstract( const abstract_t &x ) { x.do_it(); } void test_lambda() { namespace bll = boost::lambda; concrete_t concrete_inst; abstract_t &abstract_ref = concrete_inst; abstract_t *abstract_ptr = &abstract_ref; bll::bind( &abstract_t::do_it, bll::_1 ); bll::bind( &abstract_t::do_it, bll::_1 )( abstract_ptr ); bll::bind( &abstract_t::do_it, &bll::_1 ); bll::bind( &abstract_t::do_it, &bll::_1 )( abstract_ref ); //the following causes msvc 7.1 to choke. // bll::bind( &abstract_t::do_it, bll::var( abstract_ref ) ); // bll::bind( &abstract_t::do_it, bll::var( abstract_ref ) )(); bll::bind( &handle_an_abstract, bll::_1 ); //the following causes msvc 7.1 to choke. // bll::bind( &handle_an_abstract, bll::_1 )( abstract_ref ); }