コンパイラが右辺値参照をサポートしているかどうかを確認するにはどうすればよいですか?標準のプリプロセッサマクロはありますか、それとも異なるコンパイラには異なるマクロがありますか?理想的には、これを書きたいと思います。
#ifdef RVALUE_REFERENCES_SUPPORTED
foobar(foobar&& that)
{
// ...
}
#endif
コンパイラが右辺値参照をサポートしているかどうかを確認するにはどうすればよいですか?標準のプリプロセッサマクロはありますか、それとも異なるコンパイラには異なるマクロがありますか?理想的には、これを書きたいと思います。
#ifdef RVALUE_REFERENCES_SUPPORTED
foobar(foobar&& that)
{
// ...
}
#endif
私は標準のプリプロセッサマクロを知りませんが、次のようになります。
_MSC_VER >= 1600
__GXX_EXPERIMENTAL_CXX0X__
__has_feature
マクロを定義します。__has_feature(cxx_rvalue_references)
したがって、ほとんどの一般的なコンパイラでは、自分で何かをまとめるのはかなり簡単なはずです。
また、Boostにはこの目的のためのマクロがあると確信しています。これは、プロジェクトにBoostが含まれている場合に使用できる可能性があります(そうでない場合は、その実装を確認できます)。
Boost.ConfigはBOOST_NO_RVALUE_REFERENCES
そのために持っています。
標準的な方法は、標準バージョンをチェックすることです。その場合__cplusplus==199711L
、(標準の)右辺値参照がありません。もしそうなら__cplusplus==201103L
、あなたはそうします。明らかに、これはC++98の非標準コンパイラまたは非標準拡張をカバーしていません。