11

swap関数テンプレートは、C++0xでからに移動されました<algorithm><utility>前者には後者がC++0xに含まれていますか?または、両方に定義する共通のヘッダーが含まれていますswapか?

言い換えれば、次のコードはC ++ 0xでコンパイルされることが保証されていますか?

#include <algorithm>   // will this pull in std::swap?

// ...

using std::swap;
swap(a, b);
4

1 に答える 1

15

FDIS (n3290) の附属書 C、「互換性」、C.2.7 は次のように述べています。

17.6.3.2

元の機能への影響: 関数スワップが別のヘッダーに移動

根拠: スワップの <algorithm> への依存を削除します。

元の機能への影響: スワップが <algorithm> にあると想定してコンパイルされた有効な C++ 2003 コードは、代わりに <utility> を含める必要がある場合があります。

いいえ、コンパイルが保証されているわけではありません。これは意図的に重大な変更です。個々の実装が実際に C++03 コードを壊すかどうかは別の問題です。swapあなたが指摘するように、どちらかのヘッダーを介して定義することで、そうしないのは簡単です。しかし、C++03 コードを C++0x に移植しやすくするか、厳密に準拠した C++0x を書くのを助けるか、どちらかの選択肢があります。

于 2011-08-11T10:23:17.773 に答える