5

我正在尝试编译声明 std::atomic_bool 类型变量的 C++11 代码。这是在带有 clang 的 Mac OS 10.8.2 上:

clang --version
Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin12.2.0
Thread model: posix

clang 抱怨 std::atomic_bool:

clang++ -c -stdlib=libc++ -msse4 -std=c++11 -Wno-unused-parameter -I. -o query.o query.cpp
In file included from query.cpp:1:
[...]
./threadutils.h:33:10: error: no type named 'atomic_bool' in namespace 'std'; did you mean 'atomic_long'?
    std::atomic_bool work;

但是,相同的文件在使用相同编译器的 XCode 项目中编译得很好。所以我假设我在手动编译器调用中遗​​漏了一些东西。

我尝试了一些变体,例如-std=c++0xand -std=gnu++11,但无济于事。

4

2 回答 2

5

我想到了。不幸的是,我在我的问题中设置了一个错误标志:它在 XCode 中也不起作用,我在那里导入了不同版本的源文件。

问题是 C++11 定义了“atomic_bool对应于指定的命名类型atomic<bool>”,但clang 不支持

将类型从重命名atomic_boolatomic<bool>修复它。

于 2013-01-03T10:42:26.173 回答
4

我发现了同样的问题。就我而言,我通过包含原子来解决它:

#include <atomic>
static std::atomic_bool varname;

在此之后,我可以在 Linux (Ubuntu) 上使用 std=c++11 调用 g++ 以及在 XCode 上编译。

于 2016-06-14T22:01:27.690 回答