その他,細かいこと

上についてのより詳細な議論として以下が参考になる.
http://tinyurl.com/6mhad
(comp.std.c++ 2004/07/18~ "Whence swap?")
上で指摘しているswapの規格の問題は以下.
http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#226
これに対するproposalは以下.
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1523.htm
また,swapのLook Upの問題とは逆にADLによって意図しない関数がLook Upされる問題.
http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#225
これに対するproposalとしては,常に::std::で限定するというもの.
ちなみに,以上の問題の解決の一方向性として想起される関数の部分特殊化(テンプレートに対しても#1を可能にする)について,それが許されていないことに対する議論は以下.
http://www.gotw.ca/publications/mill17.htm
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2001/n1295.asc


以上から考える,ライブラリ内における自由関数呼び出しの指針.

  • クライアントの特殊化を前提とした関数を呼び出す場合:名前空間の修飾無しで呼び出す.他の名前空間にある自由関数の場合usingと併用する.ただし,これは暗黙のうちにクライアントの名前空間を汚していることになるので,ドキュメントで明確に言及しなければならない.
  • クライアントの特殊化を前提としない関数を呼び出す場合:名前空間の修飾をつけて呼び出す.