2012-05-15 6 views
22

clangのC++ 11サポート状況のWebサイトhttp://clang.llvm.org/cxx_status.htmlからは、「Initializer List」と「Lambda Expression」はバージョン3.1からすべてサポートされています。Clang 3.1とC++ 11のサポート状況

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

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

+0

[ClangでC++ 11の機能を使用するにはどうすればいいですか?](http://stackoverflow.com/questions/10408849/how-can-i-use-c-11-features-in-clang) –

答えて

29

デフォルトでは、clang++は、C++ 11の機能を有効にしません。to pass an additional flag during compilationです。

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

それとも

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

また、あなたはC++標準ライブラリの異なった実装であるlibstdc++とクラン独自のlibc++を、使用して切り替えることができます。 libc++は、既存のlibstdc++ライブラリよりもC++ 11標準の実装が優れている場合があります。あなたがする(Mac OSXのような)libstdc++の古いバージョンを使用する環境でクランを使用していますが、必要がありますように、2つのC++ライブラリは、相互に互換性がないことに注意している場合

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

後者が重要ですlibc++との依存関係を再構築する必要があります。

+1

2番目はGCCとの互換性のためのものではありません。 GCCは厳密な 'C++ 11'モードも持っています。 'gnu ++ 11'はおそらく内部コードに必要ないくつかのGNU拡張を可能にするためのものであり、確かにglibc(おそらく' gnu90'や 'gnu99'でしょう)です。 – rubenvb

+0

ありがとう@rubenvb - 明確化されました。 – birryree

+0

'-std'コマンドラインスイッチを使用しても、質問者がまだclangによってサポートされていないので、質問者が求めている機能は有効になりません。 –

0

http://clang.llvm.org/cxx_status.htmlのページはせいぜい混乱しています。現在リリースされている3.1のバージョンはイニシャライザリストやラムダをサポートしていません(GCC 4.8に戻っています)。

あなたはいつもここの指示に従って、__has__featureマクロを使用して機能の打ち鳴らすのサポートを確認することができます。これらの機能が利用可能であり、有効になっている場合

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

は、例えば、__has_feature(cxx_generalized_initializers)または__has_feature(cxx_lambdas)はtrueを返します。

個人的には、これらの機能が次のXcode(おそらく2012年6月)でリリースされる予定のclang 4.0によって準備されることを期待しています。

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

+0

clang ++ -std = C++ 11 on2.9などを試してください。彼らは良いものを持っている。 – emsr

+1

質問はイニシャライザリストとラムダ式に関するものでした。 clang 2.9はこれらの機能をサポートしていません。 –

+2

イニシャライザリストとラムダはclang 3.1でサポートされており、しばらくの間はトランクのトップでサポートされています。また、ステータスページは、しばらくの間、最新の状態に保たれています。 – bames53

関連する問題