C++ 促进未来发展';我没接到电话

C++ 促进未来发展';我没接到电话,c++,boost,continuations,C++,Boost,Continuations,当使用boost::async而不是在std::thread下时,将调用boost::future的延续。我使用的是“gcc版本5.3.0 20151204(Ubuntu 5.3.0-3ubuntu1~14.04)” 在以下程序中,“WORKS”宏下的代码打印以下输出 承诺值= 然后值=3 值=3 但另一条代码路径失败。最后第二行“newff.wait()”失败,输出如下 承诺值= 在抛出“boost::exception\u detail::clone\u impl>”what():不允许对没

当使用boost::async而不是在std::thread下时,将调用boost::future的延续。我使用的是“gcc版本5.3.0 20151204(Ubuntu 5.3.0-3ubuntu1~14.04)”

在以下程序中,“WORKS”宏下的代码打印以下输出

承诺值=
然后值=3
值=3

但另一条代码路径失败。最后第二行“newff.wait()”失败,输出如下

承诺值=
在抛出“boost::exception\u detail::clone\u impl>”what():不允许对没有关联状态的对象执行操作的实例后调用terminate。中止(堆芯转储)


#包括
#包括
#定义BOOST\u线程\u提供未来
#定义BOOST\u线程\u提供\u未来\u延续
#包括
承诺一个承诺;
int func()
{

std::我是否可以怀疑我的问题与Boost类似,或者您正在使用Boost?您的代码实现了您期望的功能,从将
[&](Boost::future&f)
更改为
[&](Boost::future&f)开始
。你说得对!我升级到了1.55,它成功了。调试这个程序浪费了几个小时……如果可以,你可能应该使用1.60,可能会有进一步的修复/更改。
#include <thread>
#include <iostream>

#define BOOST_THREAD_PROVIDES_FUTURE
#define BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
#include <boost/thread/future.hpp>

boost::promise<int> apromise;

int func()
{
    std::cout << "promise value=" << std::endl;
    apromise.set_value(3);
    return 3;
}

#define WORKS

int main()
{
#ifdef WORKS
    auto ff = boost::async(func);
#else // Doesn't work
    auto ff = apromise.get_future();
    std::thread t(func);
#endif

    auto newff = ff.then([&] (boost::future<int>& f)  
        {
            std::cout << "then value=" << f.get() << std::endl;
            return f.get();
        });

#ifndef WORKS
    t.join();
#endif

    newff.wait(); 
    std::cout << "value=" << newff.get() << std::endl;
}