11

コンパイラが右辺値参照をサポートしているかどうかを確認するにはどうすればよいですか?標準のプリプロセッサマクロはありますか、それとも異なるコンパイラには異なるマクロがありますか?理想的には、これを書きたいと思います。

#ifdef RVALUE_REFERENCES_SUPPORTED

foobar(foobar&& that)
{
    // ...
}

#endif
4

3 に答える 3

15

私は標準のプリプロセッサマクロを知りませんが、次のようになります。

  • Visual Studioは、内部バージョンが1600であるVC2010でサポートを導入したため、_MSC_VER >= 1600
  • GCCはバージョン4.3以降、右辺値参照をサポートしているため、次のバージョンと一緒にそのバージョンを確認できます。__GXX_EXPERIMENTAL_CXX0X__
  • Clangは、必要なことを正確に実行するための__has_feature マクロを定義します。__has_feature(cxx_rvalue_references)

したがって、ほとんどの一般的なコンパイラでは、自分で何かをまとめるのはかなり簡単なはずです。

また、Boostにはこの目的のためのマクロがあると確信しています。これは、プロジェクトにBoostが含まれている場合に使用できる可能性があります(そうでない場合は、その実装を確認できます)。

于 2011-06-27T12:09:56.467 に答える
9

Boost.ConfigBOOST_NO_RVALUE_REFERENCESそのために持っています。

于 2011-06-27T13:18:01.473 に答える
5

標準的な方法は、標準バージョンをチェックすることです。その場合__cplusplus==199711L、(標準の)右辺値参照がありません。もしそうなら__cplusplus==201103L、あなたはそうします。明らかに、これはC++98の非標準コンパイラまたは非標準拡張をカバーしていません。

于 2011-06-27T13:15:22.667 に答える