Clang定義了什麼宏來宣佈C++ 11模式,如果有的話?Clang定義了什麼宏來宣佈C++ 11模式(如果有的話)?
GCC定義__GXX_EXPERIMENTAL_CXX0X__
,至少有一些版本。 MSVC似乎默認啓用了支持,至少對於_MSC_VER >= 1600
。
Clang定義了什麼宏來宣佈C++ 11模式,如果有的話?Clang定義了什麼宏來宣佈C++ 11模式(如果有的話)?
GCC定義__GXX_EXPERIMENTAL_CXX0X__
,至少有一些版本。 MSVC似乎默認啓用了支持,至少對於_MSC_VER >= 1600
。
它使用不同的預處理器測試爲每個單獨的特徵,像
#if __has_feature(cxx_decltype)
用於測試如果decltype
被實現。
這裏
http://clang.llvm.org/docs/LanguageExtensions.html#checking_upcoming_features
標準說,你可以看一下_cplusplus的價值,以確定哪些標準編譯器正在瞄準。儘管在實踐中你可能無法用這些信息做很多事情。請參閱Bo Persson的答案,以獲得更好的解決方案。
C++ 98/03 - 199711L
C++ 11 - 201103L
'__cplusplus = 199711L/201103L'僅限於GCC 4.7.0及更高版本,除非補丁得到支持。 4.6和更早版本使用'__cplusplus = 1'。 – moshbear
感謝您指出了這一點。它似乎可用。 – wilx
我必須承認我非常喜歡這個系統,我希望其他編譯器能夠在這裏跳上這一行。它比檢查版本號更加明顯。 –