簡単なコードをコンパイルしてみます
#include <atomic>
int bar = 0;
void foo(std::atomic<int>&flag)
{ bar = flag; }
clang++ 3.2 (llvm.org から llvm 3.2 としてダウンロード; mac os.x 10.8.3 では、これはエラーで失敗します
/> clang++ -std=c++11 -stdlib=libc++ -O3 -march=native -c test.cc
test.cc:1 からインクルードされたファイル:
/usr/include/c++/v1/atomic:576:17: エラー: アトミック操作の最初の引数は、非 const _Atomic 型へのポインターでなければなりません ('const _Atomic(int) *' 無効)
{return __c11_atomic_load(&__a_, __m);} ^ ~~~~~
/usr/include/c++/v1/atomic:580:53: 注: メンバー関数のインスタンス化で 'std::_ 1:: _atomic_base::load' がここで要求されました
operator _Tp() const _NOEXCEPT {return load();} ^
test.cc:5:9: 注: メンバー関数のインスタンス化で 'std::_ 1:: _atomic_base::operator int' がここで要求されました
bar = done;
代わりに /usr/bin/clang++ (OS または Xcode に付属) を使用すると、問題なくコンパイルされます。どちらの場合も libc++ は /usr/lib/c++/v1 にあります。
私は何が欠けていますか?llvm 3.2 に付属している別の libc++ はありますが、それはありませんか? (clang3.2 ツリーには何も見つかりません)。