0

を使用してライブラリをコンパイルしようとしていますが、 が定義されていない-std=c++03ため、コンパイルに失敗しています。nullptr_t

ハードコーディングされたマクロを使用して C++11 コンパイルではなく C++03 を保証するにはどうすればよいですか?

前もって感謝します。

4

2 に答える 2

7

標準に存在する唯一のバージョン検出はマクロの値です__cplusplus: 201103C++11 (ISO/IEC 14882-2011 §16.8/1) および199711C++98 (ISO/IEC 14882-1998 §16.8/1) の場合. C++03 は、明らかに独自の番号と使用法に値するものではありませんでし199711た (ISO/IEC 14882-2003 §16.8/1)。これが特徴検出の手段として不十分であると思われる場合は、あなただけではありません

いずれにせよ、問題のライブラリのドキュメントを参照して、C++11 より前のライブラリを構成する方法を決定する必要があります。

于 2013-07-23T20:00:43.303 に答える
2

残念ながら、すべてのコンパイラで機能するマクロは知りません。g++ と clang には、__GXX_EXPERIMENTAL_CXX0X__c++11 でのみ定義されているという名前のマクロがあるため、次のことができます。

#ifndef __GXX_EXPERIMENTAL_CXX0X__
  // Do some c++03 specific code
#endif
于 2013-07-23T20:00:18.187 に答える