std :: async,带clang33的libc ++在Linux下不起作用

时间:2013-12-06 10:30:58

标签: linux c++11 clang

我有一个非常简单的程序,可以在OSX下使用clang33。但是,如果我尝试在Linux下运行相同的程序,它就会失败。有没有人在Linux(CentoOS)下使用std :: asynch与clang33一起工作?

#include <iostream>
#include <future>
#include <thread>

int main() {
    // future from a packaged_task
  std::packaged_task<int()> task([]() {
    return 7;
  });                                       // wrap the function
  std::future<int> f1 = task.get_future();  // get a future
  std::thread(std::move(task)).detach();    // launch on a thread

    // future from an async()
  std::future<int> f2 = std::async(std::launch::async, []() {
    return 8;
  });

  // future from a promise
  std::promise<int> p;
  std::future<int> f3 = p.get_future();
  std::thread([](std::promise<int> & p) {
    p.set_value(9);
  },
              std::ref(p)).detach();

  std::cout << "Waiting..." << std::flush;
  f1.wait();
  f2.wait();
  f3.wait();
  std::cout << "Done!\nResults are: " << f1.get() << ' ' << f2.get() << ' '
            << f3.get() << '\n';
}

当我用cxxabi编译libc ++时,上面的例子适用于trunk / 198686。但是现在我遇到了另一个问题:

#include <iostream>
#include <vector>  
#include <exception>

int main () {
  std::vector<int> foo;

  try {
    foo.at(1);
  }
  catch (std::exception& e) {
    std::cerr << "exception caught: " << e.what() << '\n';
  }
  std::cout << "Works" << '\n';
  return 0;
}

上面的示例代码在OS X下生成以下预期输出:

异常捕获:向量 作品

在Linux下,我得到以下输出:

异常捕获:分段错误

我调试了代码,并且在logic_error(stdexcept.cpp,第137行)的析构函数内部发生了分段错误。有没有人有任何建议?

BTW:使用libsupc ++方法不再可能编译libc ++。

我实际上已经完成了所有工作。 r198686发生上述问题。我检查了与@BenPope相同的修订版,然后一切都按预期工作。

谢谢, 帕特里克

0 个答案:

没有答案