我正在尝试编译声明类型为std :: atomic_bool的变量的C ++ 11代码。这是在Mac OS 10.8.2上使用clang:
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++0x
和-std=gnu++11
,但无济于事。
答案 0 :(得分:5)
我明白了。不幸的是,我在我的问题中设置了一个错误的标志:它在XCode中也不起作用,我在那里导入了不同版本的源文件。
问题是C ++ 11定义了“与指定的atomic_bool
”对应的命名类型atomic<bool>
,但是clang doesn't support that。
将类型从atomic_bool
重命名为atomic<bool>
修复它。
答案 1 :(得分:3)
我发现了同样的问题。就我而言,我通过包含原子来解决它:
#include <atomic>
static std::atomic_bool varname;
在此之后,我可以在Linux(Ubuntu)上使用std = c ++ 11调用g ++以及在XCode上编译。