Ubuntu 13.10上的std :: promise <t> :: set_value()结束于&#34;未知错误-1&#34; (标准:: SYSTEM_ERROR)</T>

时间:2014-01-15 13:26:14

标签: c++ ubuntu g++ promise future

使用g ++ - 4.8或g ++ - 4.7,以下cpp代码无法在Ubuntu 13.10上运行。我不知道如何解决这个问题。似乎在较旧的Ubuntu版本(例如13.04)上,下面的代码工作正常。

代码

#include <future>
#include <iostream>

int main(int argc, char** argv) 
{
    int step = 0;
    std::cout << "step " << ++step << std::endl;

    std::promise<int> promise;
    std::cout << "step " << ++step << std::endl;

    try
    {
        promise.set_value(42);
        std::cout << "step " << ++step << std::endl;
    }
    catch (const std::system_error& ex)
    {
        std::cout << "Exception: " << ex.what() << "\n";
    }
}

构建并运行

g++ promise_test.cpp -o promise_test -pthread -std=c++11 && ./promise_test

输出

step 1
step 2
Exception: Unknown error -1

2 个答案:

答案 0 :(得分:2)

bug report。提供的工作是-Wl,--no-as-needed。请参阅此other question

答案 1 :(得分:1)

作为替代方案,我们使用-static-libstdc++标志修复它。