2013-07-19 20 views
6

プリプロセッサディレクティブを使用してC++標準ライブラリにC++ 11サポートがあるかどうかを調べることはできますか?C++ 11標準ライブラリを検出するプリプロセッサディレクティブはありますか?

私は現在、C++ 11言語の方言を使用していますが、C++ 11標準のサポートなしのC++標準ライブラリを使用しています(非C++ 11とリンクできるようにするために必要ですライブラリ)。

私は#if __cplusplus >= 201103Lを使ってC++ 11のサポートをテストできることを知っていますが、私の場合はこれが真と評価されます。私はC++ 11のC++標準ライブラリのサポートについて知っておく必要があります。

+1

関連:http://stackoverflow.com/q/11886288/743214 –

+1

* "#if __cplusplus> = 201103L" * - Noを使用してC++ 11のサポートをテストできることを知っています、そうではありません。ほとんどのコンパイラではC++ 11のサブセットしかサポートされていませんが、サブセットは大きくても問題ありませんが、この '__cplusplus'マクロはまったく役に立ちません。標準的な機能(言語やライブラリであるかどうか)を移植可能なものとしてテストすることはまだ解決されていません(TemplateRex *が答えているように、*解決しようとしています)。 –

+1

私には、CMakeやautotoolsのような設定ツールが必要なような問題があります。彼らはあなたをチェックし、あなたが評価できるマクロを含むヘッダーを生成します。ライブラリのみの場合は、マクロを提供するようにユーザーに依頼することができますが、それでも解決方法は貧弱です。 – usr1234567

答えて

3

フィーチャのテストは、次のC++ 14スタンダード(それ以上)に向かう標準委員会の積極的な研究方向です。現在の開発が議論されている自らが自由にアクセス可能な研究グループ10がある(mailinglist)。次回の会議では、N3694 working paperが提出されました。

3

私の問題は、C++標準ライブラリの選択がlibstd++ (GNU C++ standard library)libc++ (LLVM C++ standard library with C++11 support)の間にあるiOSプラットフォームで発生しました。私は_GLIBCXX_を使って終わった。

+1

あなたは '__GLIBCXX__'を意味すると思います。' ifdef'ではなく 'ifdef'を意味しますか?あなたのテストでは、libstdC++にはC++ 11のサポートはありませんが、そうではありません。あなたのMacに付属している古代版にはC++ 11のサポートがありません。 –

+0

... 1年後...私は実際に標準ライブラリの自動検査に頼るのではなく、私自身の手動プリプロセッサ定義を使用してしまった。 – Mortennobel

関連する問題