web-dev-qa-db-ja.com

Clang3.1およびC ++ 11のサポートステータス

ClangのC++ 11サポートステータスWebサイトから http://clang.llvm.org/cxx_status.html 、「InitializerList」と「LambdaExpression」はすべてバージョン3.1からサポートされていると書かれています。 。

ただし、LLVM/Clangトランク(3.2)を使用して、初期化子リストとラムダ式に対してコンパイルすると、エラーメッセージが表示されます。

Clang> 3.1がこれらの機能をサポートしているかどうか誰かが知っていますか?

22
will

デフォルトでは、clang++はC++ 11機能を有効にしません-あなたは コンパイル中に追加のフラグを渡すために

clang++ -std=c++11 [input files...]

または

# enables some additional C++11 extensions GCC has
clang++ -std=gnu++11 [input files...] 

さらに、libstdc++とClang独自の libc++ の使用を切り替えることができます。これらは、C++標準ライブラリのさまざまな実装です。 libc++は、既存のlibstdc++ライブラリよりもC++ 11標準の実装が優れている場合があります。

# uses clang's C++ library in C++98 mode
clang++ -stdlib=libc++ [input] # uses clang's C++ library

# uses clang's C++ library and enables C++11 mode
clang++ -stdlib=libc++ -std=c++11 [input] 

後者は、古いバージョンのlibstdc++(Mac OSXなど)の環境でClangを使用している場合に重要ですが、2つのC++ライブラリは相互に互換性がないため、再構築する必要があります。 libc++を使用する場合の依存関係。

32
wkl

http://clang.llvm.org/cxx_status.html のページはせいぜい混乱しています。現在、リリースされた3.1バージョンは初期化リストまたはラムダをサポートしていません(そのため、当面はGCC 4.8に切り替えました)。

以下の手順に従って、___has__feature_マクロを使用して機能のclangサポートをいつでも確認できます。

http://clang.llvm.org/docs/LanguageExtensions.html#checking_language_features

たとえば、__has_feature(cxx_generalized_initializers)または__has_feature(cxx_lambdas)は、これらの機能が使用可能で有効になっている場合にtrueを返します。

個人的には、これらの機能は次のXcode(2012年6月の可能性が高い)でリリースされる予定のclang4.0で準備が整うことを期待しています。

-私がテストしてきたバージョンを明確にするために編集しました-明らかに、clangのバージョン管理は私が思っていたよりも複雑です。

0
Bill Weinman