2012-04-19 10 views
7

個々のC++ 0x/C++ 11言語機能の存在を確認するにはどうすればよいですか?私はClangがこれに対して素晴らしいシステムを持っていることを知っています。 GCC、Visual Studio、Boostはどうですか?私はそれを行う1つの方法は、コンパイラのバージョンを検出し、そのバージョンで導入された機能に関連付けることだと思います。しかし、それは面倒です。誰かがすでにそれをしていますか?C++ 11機能チェック

+1

直感的な答えは、その機能を持つコードを記述してコンパイルすることです。 – iammilind

+0

この質問を閉じる必要があるのはなぜですか? –

+0

@Nordlöw:[この質問](http://stackoverflow.com/q/6095885/636019)の複製として2人が投票に参加しました。 – ildjarn

答えて

3

boost configには、C++ 11の機能の一部を確認するスクリプトが付属しています。

各機能のマクロを含む設定ファイルを生成します。

+0

私はあなたが何かを書くことを意図したと思う*参照してください:*。とにかく、はい、Boost.Configがおそらく最良の賭けです。 Boostの人たちはすでに情報を追跡しているので、コンパイラのチームが宣伝するのに十分安定しているかどうかを正確に知っているか、Clangが新しいチェックフラグを要求しているかを知る必要はありません。 –

+0

実際には、それはドラフト・アンサーから残ったものでした。私はそれを削除します。ありがとう。 – mirk

3

あなたのビルドツールでこれを手助けすることができます。

CMakeにはtry_compileコマンドがあります。このコマンドを使用すると、コードサンプルがコンパイルされ、コンパイル結果に基づいて変数が設定されるかどうかをテストできます。

現時点では、私はちょうどautoのようなより一般的にサポートされている機能を使用しています。

多くの場合、Boostを使用して不足しているライブラリの機能を置き換えることができます。これは、コンパイラやライブラリが更新され、バグが修正されてから数年間は最適なオプションです。

GCCのためのC++ 11機能の互換性リストはここにある:http://gcc.gnu.org/projects/cxx0x.html

注意警告:

重要:C++ 11のためのGCCのサポートはまだ実験的なものです。一部の機能は初期の提案に基づいて実装されており、最終的なC++ 11標準に一致するように更新されたときに下位互換性を維持する試みは行われません。