如何檢查我的編譯器是否支持右值引用?是否有標準的預處理器宏,或者不同的編譯器有不同的宏?理想情況下,我希望寫這篇文章:移動操作的條件編譯
#ifdef RVALUE_REFERENCES_SUPPORTED
foobar(foobar&& that)
{
// ...
}
#endif
如何檢查我的編譯器是否支持右值引用?是否有標準的預處理器宏,或者不同的編譯器有不同的宏?理想情況下,我希望寫這篇文章:移動操作的條件編譯
#ifdef RVALUE_REFERENCES_SUPPORTED
foobar(foobar&& that)
{
// ...
}
#endif
我不知道任何標準預處理宏,但:
_MSC_VER >= 1600
__GXX_EXPERIMENTAL_CXX0X__
__has_feature
macros做你需要的東西:__has_feature(cxx_rvalue_references)
所以對於大多數常見的編譯器來說,應該很容易就可以自己拼湊一些東西。
我也敢肯定,加速了這個目的,你可以使用,如果你的項目包括升壓(否則你可以看看他們的實現)
的標準方法是檢查宏標準版本:如果__cplusplus==199711L
那麼你沒有(標準)右值引用。如果__cplusplus==201103L
,你這樣做。顯然,這不包括非標準的編譯器或C++ 98的非標準擴展。
Boost.Config具有BOOST_NO_RVALUE_REFERENCES
。
非常感謝:) – fredoverflow
我必須承認,我真的很喜歡Clang選擇宣傳其各種功能和擴展的方式,它比檢查版本號更清晰,也更詳細。 –