標準ライブラリの特定のC++11機能の存在をチェックする良い方法は何ですか。
コンパイラー機能については、(IMHO)メジャーコンパイラー(現時点ではVC ++、gcc、clang 、おそらくIntel)のコンパイラーバージョンを確認する方法をとったところです。これは最善かつ最も柔軟なアプローチではありませんが、わかりません。本当に素晴らしいマクロを持っているclangを除いて、まだもっと良いものの。__has_feature
ただし、コンパイラに厳密に結合されていないライブラリ機能の場合はさらに悪化します。現時点では、VC ++のコンパイラバージョンをチェックするのと同じアプローチを使用したいと思います(独自のライブラリを使用していると仮定すると、非常に簡単です)。clangの場合、少なくとも__has_include
大規模なヘッダーベースのクエリに使用できます。それ以外は、定義されている場合はの値を確認することをお勧めしますが、現在のバージョンがサポートしている機能以外に、どの特定のlibstdc++__GLIBCXX__
バージョンがどの機能を導入したかについての情報を見つけることができません。
洗練された構成手順やサードパーティのライブラリを使用せずにヘッダーのみのライブラリで使用したいので、メソッドはプリプロセッサチェックなどに保持する必要があります(もちろん、ブーストはサードパーティです)。
それで、それらの(かなり狭い)条件下で特定のC++11ライブラリ機能をチェックする私の可能性は何ですか。たぶん、宣言されている特定の関数やタイプの規模でさえ?
コンパイラまたはライブラリのバージョンを確認することが依然として最善のアプローチである場合、特定のバージョンのlibstdc ++(およびおそらく他の重要な機能、おそらくlibc ++ )でサポートされる特定のC ++ 11機能に関する詳細情報はどこにありますか?
現時点でFWIWは<cstdint>
、C ++ 11<cmath>
関数とstd::hash
に関心がありますが、これは変更される可能性があり、一般的なアプローチではおそらく重要ではありません。