ClangのC++ 11サポートステータスWebサイトから http://clang.llvm.org/cxx_status.html 、「InitializerList」と「LambdaExpression」はすべてバージョン3.1からサポートされていると書かれています。 。
ただし、LLVM/Clangトランク(3.2)を使用して、初期化子リストとラムダ式に対してコンパイルすると、エラーメッセージが表示されます。
Clang> 3.1がこれらの機能をサポートしているかどうか誰かが知っていますか?
デフォルトでは、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++
を使用する場合の依存関係。
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のバージョン管理は私が思っていたよりも複雑です。