boost 1.38からswapライブラリが入りました。

#include <boost/swap.hpp>

// 配列のスワップをサポート
void test1() {
    char a[5], b[5];
    std::swap(a,b); //NG  (C++11以降から可能になった)
    boost::swap(a,b);
}

// 「std::」の有無
struct basket{
    void swap(basket& b){} //fast and exception-safe swap
};
void swap(basket& l, basket& r) { l.swap(r); } //フリー関数

void test2() {
    basket c, d;

    std::swap(c, d);//slow
    using namespace std;
    swap(c, d);//fast
    boost::swap(c, d);//fast
}

コンテナなどのクラスは標準のswapを使わずに自前のswap関数を使用したほうが高速で例外安全に出来る場合があります。
std::swap();と書いた場合、(フリー関数経由で)basket::swap()は使ってくれません。
swap();と書けばOKなのですがもし自前のswapが定義されなかった場合はエラーになってしまいます。その場合にはstd::swap()にフォールバックしたいわけです。そうするには事前にusing namespace std;としておけばよいのですが少々面倒です。
boost::swap()は内部で

using namespace std;
swap(lhs,rhs);

としてくれていますので簡単です。

また別の利点として自前のswapメンバ関数内で2項のフリー関数のswapを呼び出そうとしてswap(lhs,rhs);と書いてもエラーになってしまいます。

struct basket{
    void swap(basket& b){
        using  namespace std;
        int x, y;
        swap(x,y); //エラー メンバ関数版と勘違いされる
        boost::swap(x,y); //OK
    }
};

boost::swap()を使っておけば頭を悩ませる必要もありません。