如何检查我的编译器是否支持右值引用?是否有标准的预处理器宏,或者不同的编译器有不同的宏?理想情况下,我想写这个:
#ifdef RVALUE_REFERENCES_SUPPORTED
foobar(foobar&& that)
{
// ...
}
#endif
答案 0 :(得分:15)
我不知道任何标准的预处理器宏,但是:
_MSC_VER >= 1600
__GXX_EXPERIMENTAL_CXX0X__
__has_feature
macros以完全满足您的需求:__has_feature(cxx_rvalue_references)
因此对于大多数常见的编译器来说,自己拼凑一些东西应该相当容易。
我也很确定Boost有一个用于此目的的宏,如果您的项目包含Boost,您可以使用它(否则您可以查看它们的实现)
答案 1 :(得分:9)
Boost.Config有BOOST_NO_RVALUE_REFERENCES
。
答案 2 :(得分:5)
标准方法是检查标准版本:如果__cplusplus==199711L
那么您没有(标准)右值参考。如果是__cplusplus==201103L
,你可以。显然,这不包括非标准编译器或C ++ 98的非标准扩展。