libc ++的一个错误?未来和C ++ 11

时间:2014-02-02 08:25:16

标签: c++ c++11 g++ clang libc++

#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.1libstdc++的Ubuntu 13.10 64位下编译得很好,因为clanglibc++无法在同一平台上进行编译{1}}库显然没有以正确的方式实现所有内容。

这是clang的c ++标准库的错误还是我的代码有问题?

我正在使用官方llvm apt存储库中libc++1.0~svn181765-1的{​​{1}}版本。

使用libc++ libc++abi获得的输出:

clang++

1 个答案:

答案 0 :(得分:3)

这是由libc ++的这个版本修复的: http://llvm.org/viewvc/llvm-project?view=revision&revision=188413