Creating boost::thread with an std::shared_ptr object
===

I have the following two code segments. The first block compiles and works as expected. However the second block does not compile. 

My question is, given the code below what the correct syntax when trying to create a thread based on an object that is being proxied by a shared_ptr?


    #include <iostream>
    #include <new> 
    #include <memory>
    
    #include <boost/thread.hpp>
    
    struct foo
    {
       void boo() {}
    };
    
    int main()
    {
       //This works
       {
          foo* fptr = new foo;
          boost::thread t(&foo::boo,fptr);
          t.join();
          delete fptr;
       }
    
       //This doesn't work
       {
          std::shared_ptr<foo> fptr(new foo);
          boost::thread t(&foo::boo,fptr);
          t.join();
       }
    
       return 0;
    }



The compiler error:


    Error	5	error C2784: 'T *boost::get_pointer(T *)' : could not deduce template argument for 'T *' from 'std::tr1::shared_ptr<_Ty>'	c:\program files (x86)\boost\boost_1_47\boost\bind\mem_fn_template.hpp	40	1	htest
    Error	3	error C2784: 'T *boost::get_pointer(const std::auto_ptr<_Ty> &)' : could not deduce template argument for 'const std::auto_ptr<_Ty> &' from 'std::tr1::shared_ptr<_Ty>'	c:\program files (x86)\boost\boost_1_47\boost\bind\mem_fn_template.hpp	40	1	htest
    Error	4	error C2784: 'T *boost::get_pointer(const std::auto_ptr<_Ty> &)' : could not deduce template argument for 'const std::auto_ptr<_Ty> &' from 'std::tr1::shared_ptr<_Ty>'	c:\program files (x86)\boost\boost_1_47\boost\bind\mem_fn_template.hpp	40	1	htest
    Error	8	error C2784: 'T *boost::get_pointer(const boost::shared_ptr<X> &)' : could not deduce template argument for 'const boost::shared_ptr<X> &' from 'std::tr1::shared_ptr<_Ty>'	c:\program files (x86)\boost\boost_1_47\boost\bind\mem_fn_template.hpp	40	1	htest
    Error	9	error C2784: 'T *boost::get_pointer(const boost::shared_ptr<X> &)' : could not deduce template argument for 'const boost::shared_ptr<X> &' from 'std::tr1::shared_ptr<_Ty>'	c:\program files (x86)\boost\boost_1_47\boost\bind\mem_fn_template.hpp	40	1	htest
    Error	1	error C2784: 'T *boost::get_pointer(const boost::scoped_ptr<T> &)' : could not deduce template argument for 'const boost::scoped_ptr<T> &' from 'std::tr1::shared_ptr<_Ty>'	c:\program files (x86)\boost\boost_1_47\boost\bind\mem_fn_template.hpp	40	1	htest
    Error	2	error C2784: 'T *boost::get_pointer(const boost::scoped_ptr<T> &)' : could not deduce template argument for 'const boost::scoped_ptr<T> &' from 'std::tr1::shared_ptr<_Ty>'	c:\program files (x86)\boost\boost_1_47\boost\bind\mem_fn_template.hpp	40	1	htest
    Error	6	error C2784: 'T *boost::get_pointer(const boost::reference_wrapper<T> &)' : could not deduce template argument for 'const boost::reference_wrapper<T> &' from 'std::tr1::shared_ptr<_Ty>'	c:\program files (x86)\boost\boost_1_47\boost\bind\mem_fn_template.hpp	40	1	htest
    Error	7	error C2784: 'T *boost::get_pointer(const boost::reference_wrapper<T> &)' : could not deduce template argument for 'const boost::reference_wrapper<T> &' from 'std::tr1::shared_ptr<_Ty>'	c:\program files (x86)\boost\boost_1_47\boost\bind\mem_fn_template.hpp	40	1	htest
    Error	10	error C2784: 'T *boost::get_pointer(const boost::intrusive_ptr<T> &)' : could not deduce template argument for 'const boost::intrusive_ptr<T> &' from 'std::tr1::shared_ptr<_Ty>'	c:\program files (x86)\boost\boost_1_47\boost\bind\mem_fn_template.hpp	40	1	htest
    Error	11	error C2784: 'T *boost::get_pointer(const boost::intrusive_ptr<T> &)' : could not deduce template argument for 'const boost::intrusive_ptr<T> &' from 'std::tr1::shared_ptr<_Ty>'	c:\program files (x86)\boost\boost_1_47\boost\bind\mem_fn_template.hpp	40	1	htest

