future<void>

BoostやC++0xにあるfutureクラスはvoidで特殊化されていて、get()したときに単にwaitするだけ、という動作になるようです。

#include <iostream>
#include <boost/thread.hpp>
#include <boost/ref.hpp>

void foo()
{
    // 時間のかかる処理...
    boost::this_thread::sleep(boost::posix_time::seconds(5));

    std::cout << "end foo" << std::endl;
}

int main()
{
    boost::packaged_task<void> p(foo);
    boost::unique_future<void> f(p.get_future());
    boost::thread t(boost::ref(p));

    f.get();

    std::cout << "end process" << std::endl;
}
end foo
end process