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++0xやなどのいくつかのバリエーションを試しましたが-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 に答える