Can any one please explain to me why the former fails while the latter compilesThe definition:

 

// usage in a ctor initialisation list , where m_button_monitor is of type ButtonMonitor,

, m_button_monitor(boost::bind(boost::mem_fn(&CView::OnRun), this, ID_TOOLBUTTON_AUTO))

 

 

//definition  1 of ButtonMonitor that fails

// the error message by MS VC9SP1:

// error C2664: 'programmer_board::ButtonMonitor::ButtonMonitor(boost::function<Signature> &)' :

//cannot convert parameter 1 from 'boost::_bi::bind_t<R,F,L>' to 'boost::function<Signature> &'

//

        class ButtonMonitor

        {

        public:

                ButtonMonitor(boost::function<void()>& f)

                        : m_f(f)

                {

                }

 

                void UpdateStatus(BUTTON_STATUS status)

                {

                                m_f();

                };

 

        private:

                boost::function<void()>& m_f;

       

        };

 

//definition  2 of ButtonMonitor that works

        class ButtonMonitor

        {

        public:

                ButtonMonitor(const boost::function<void()>& f)

                        : m_f(f)

                {

                }

 

                void UpdateStatus(BUTTON_STATUS status)

                {

                 m_f();

                };

 

        private:

                const boost::function<void()>& m_f;

       

        };

Thanks,