を使用してライブラリをコンパイルしようとしていますが、 が定義されていない-std=c++03
ため、コンパイルに失敗しています。nullptr_t
ハードコーディングされたマクロを使用して C++11 コンパイルではなく C++03 を保証するにはどうすればよいですか?
前もって感謝します。
標準に存在する唯一のバージョン検出はマクロの値です__cplusplus
: 201103
C++11 (ISO/IEC 14882-2011 §16.8/1) および199711
C++98 (ISO/IEC 14882-1998 §16.8/1) の場合. C++03 は、明らかに独自の番号と使用法に値するものではありませんでし199711
た (ISO/IEC 14882-2003 §16.8/1)。これが特徴検出の手段として不十分であると思われる場合は、あなただけではありません。
いずれにせよ、問題のライブラリのドキュメントを参照して、C++11 より前のライブラリを構成する方法を決定する必要があります。
残念ながら、すべてのコンパイラで機能するマクロは知りません。g++ と clang には、__GXX_EXPERIMENTAL_CXX0X__
c++11 でのみ定義されているという名前のマクロがあるため、次のことができます。
#ifndef __GXX_EXPERIMENTAL_CXX0X__
// Do some c++03 specific code
#endif