コンテナテンプレートなどを書いていると想像してみてください。そして、それに特化する時が来まし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
である必要があるということです。これをどのように処理しますか?swap
std::swap