22

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

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

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

4

2 に答える 2

32

デフォルトでclang++は、C++11機能は有効になりません。コンパイル中に追加のフラグを渡す必要があります。

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

または

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

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

# 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] 

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

于 2012-05-15T14:23:57.277 に答える
0

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を返します。

個人的には、これらの機能はclang 4.0で利用できるようになると期待しています。これは、次のXcode(2012年6月の可能性が高い)でリリースされる予定です。

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

于 2012-05-15T15:28:39.520 に答える