fre*_*low 11 c++ rvalue-reference move-semantics c-preprocessor c++11
如何检查我的编译器是否支持右值引用?是否有标准的预处理器宏,或者不同的编译器有不同的宏?理想情况下,我想写这个:
#ifdef RVALUE_REFERENCES_SUPPORTED
foobar(foobar&& that)
{
// ...
}
#endif
Run Code Online (Sandbox Code Playgroud)
jal*_*alf 15
我不知道任何标准的预处理器宏,但是:
_MSC_VER >= 1600__GXX_EXPERIMENTAL_CXX0X____has_feature 宏:__has_feature(cxx_rvalue_references)因此对于大多数常见的编译器来说,自己拼凑一些东西应该相当容易.
我也很确定Boost有一个用于此目的的宏,如果您的项目包含Boost,您可以使用它(否则您可以查看它们的实现)
标准方法是检查标准版本:如果__cplusplus==199711L那样你没有(标准)右值引用.如果__cplusplus==201103L,你这样做.显然,这不包括非标准编译器或C++ 98的非标准扩展.