想象一下,我正在编写一些容器模板或其他东西。是时候专攻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
的 isnoexcept
只要交换为T
is noexcept
。所以,我会写这样的东西:
template <typename T>
void swap(my_template<T>& x, my_template<T>& y)
noexcept(noexcept(swap(std::declval<T>(), std::declval<T>())))
问题是,swap
其中需要发现 ADLswap
或std::swap
. 我该如何处理?