#include <thread>
#include <future>
#include <iostream>
#include <atomic>
#include <cstdint>
template <typename T>
void consumeFuture(std::future<T>&& fut) {
fut.get();
}
template <typename T>
void actOnT(std::atomic<T>& at) {
++at;
}
int main() {
std::atomic<uint32_t> a{42};
consumeFuture(std::async(std::launch::async, &actOnT<uint32_t>, std::ref(a)));
std::cout << a << "\n";
}
此代码在使用g++ 4.8.1
和libstdc++
的Ubuntu 13.10 64位下编译得很好,因为clang
和libc++
无法在同一平台上进行编译{1}}库显然没有以正确的方式实现所有内容。
这是clang的c ++标准库的错误还是我的代码有问题?
我正在使用官方llvm apt存储库中libc++
和1.0~svn181765-1
的{{1}}版本。
使用libc++
libc++abi
获得的输出:
clang++
答案 0 :(得分:3)
这是由libc ++的这个版本修复的: http://llvm.org/viewvc/llvm-project?view=revision&revision=188413