Hi folks,

To better understand the "future" concept, I am looking at the following code and have several questions:
(1) I got a compiling warning: 'this' : used in base member initializer list. How can I get rid of it?
(2) how can I bind class's local data x_ into the new thread? I tried:   t_(boost::bind(&future<T>::run, this, x_) ),   but it does not work.
(3) There seems a race condition in the overloaded function call operator()(). What wrong did I do?

BTW: if the future is constructed as ctor using:
          future(boost::function<T ()> const& f);
the code snippet works with minor modification.

Thanks in advance,

Cheers,
Robert
====== code snippet =====
#include <boost/bind.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread/thread.hpp>
#include <boost/function.hpp>

template<typename T>
class future : boost::noncopyable
{
public:
    future(boost::function<T (int)> const& f, int);
    T operator()();
private:
        int x_;                               
        bool joined_;
        T v_;
        boost::function<T (int)> const& f_;
        boost::mutex m_;
        void run();
        boost::thread t_;
};

template<typename T>
future<T>::future(boost::function<T (int)>const& f, int x) : x_(x), joined_(false), v_(T()), f_(f), t_(boost::bind(&future<T>::run, this) ) { }

template<typename T>
T future<T>::operator()()
{
        mutex::scoped_lock lock(m_);
        if (!joined_) {
            t_.join();
            joined_ = true;
        }
        return v_;
}

template<typename T>
void future<T>::run()
{
    v_ = f_(x_);
}