C++03 + boost で C++0x の async

適当なワードで検索すると

https://svn.boost.org/trac/boost/ticket/4710

とかがひっかかると思うんですが、このコードは動きません。unique_future の寿命延びたりしないのでダメです。
ということで shared_future 返すようにしましょう。

#include <boost/thread.hpp>
#include <boost/utility/result_of.hpp>

template <class F>
boost::shared_future<typename boost::result_of<F()>::type>
async(F f)
{
    typedef typename boost::result_of<F()>::type R;
    boost::packaged_task<R> pt( f );
    boost::shared_future<R> ret = boost::move(pt.get_future());
    boost::thread( boost::move(pt) ).detach();
    return ret;
}

多分こんな感じです。
手元に vs2010 の express しかないので試せない…03 モードとかないのか…