C++ Clang3.2在std::atomic上失败——一个libc++;问题

C++ Clang3.2在std::atomic上失败——一个libc++;问题,c++,c++11,clang,atomic,libc++,C++,C++11,Clang,Atomic,Libc++,我试着编译简单的代码 #include <atomic> int bar = 0; void foo(std::atomic<int>&flag) { bar = flag; } /usr/include/c++/v1/atomic:580:53:注意:在成员函数的实例化中 此处请求了“std::_1::_atomic_base::load” operator _Tp() const _NOEXCEPT {return load();}

我试着编译简单的代码

#include <atomic>
int bar = 0;
void foo(std::atomic<int>&flag)
{ bar = flag; }
/usr/include/c++/v1/atomic:580:53:注意:在成员函数的实例化中 此处请求了“std::_1::_atomic_base::load”

operator _Tp() const _NOEXCEPT          {return load();}
                                                ^
bar = done;
test.cc:5:9:注意:在成员函数“std::_1::_atomic_base::operator int”的实例化中,此处请求

operator _Tp() const _NOEXCEPT          {return load();}
                                                ^
bar = done;
当我改用/usr/bin/clang++时(OS或Xcode附带),它的编译效果很好。在这两种情况下,libc++都位于/usr/lib/c++/v1


我错过了什么?LLVM3.2附带了另一个libc++但我缺少了它吗?(我在clang3.2树中找不到任何内容)。

Xcode现在将libc++捆绑在Xcode.app目录中。您可以通过控制单击Xcode.app并选择“显示软件包内容”来检查此目录。

这里似乎是一个库问题(伪
const
)。不,libc++属于LLVM范畴,所以您应该有一个正确的版本。@MatthieuM。我不明白。libc++at/usr/include/c++/v1不是随llvm3.2下载的,而是随操作系统一起提供的。然而xcode似乎有自己的版本(见答案)。那么你说的“伞”是什么意思呢?LLVM是一个目标(相对)明确的开源项目,LLVM伞指的是与LLVM相关的项目;这些项目大多托管在LLVM SVN服务器中。例如,Clang、libc++和lldb可以被认为是由LLVM托管的。因此,也就是说,您可能有一个新的LLVM,并且使用的不是适合它的libc++而是您机器上某个地方的另一个libc++。确实有另一个libc++位于
/Applications/Xcode.app/Contents/Developer/toolschains/xcodefault.xctoolschain/usr/lib/c++/v1/
(带有Toolchains的奇怪目录名)它的
原子
的不同之处在于将
\uuu a
声明为可变的。这就解决了问题。我仍然不明白的是,为什么我的笔记本电脑上有这两个不同的版本。还有不同版本的abi吗?Xcode将libc++的位置从/usr/include更改为internal。很可能安装程序离开了/usr/include而不是删除它。同样的abi(1)仍然是最新的。