コンテナテンプレートなどを書いていると想像してみてください。そして、それに特化する時が来ましstd::swapた。善良な市民として、私は次のようなことを行うことでADLを有効にします。
template <typename T>
void swap(my_template<T>& x, my_template<T>& y) {
using std::swap;
swap(x.something_that_is_a_T, y.something_that_is_a_T);
}
これは非常にきちんとしていて、すべてです。例外仕様を追加したいまで。swapのスワップがであるnoexcept限り、私のはTですnoexcept。だから、私は次のようなものを書いているでしょう:
template <typename T>
void swap(my_template<T>& x, my_template<T>& y)
noexcept(noexcept(swap(std::declval<T>(), std::declval<T>())))
問題は、 ADLで発見されたまたはswapである必要があるということです。これをどのように処理しますか?swapstd::swap