我有一个非常简单的程序,可以在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相同的修订版,然后一切都按预期工作。
谢谢, 帕特里克