|  | 
| template<class T > | 
| tag | swap (T &, T &) | 
|  | 
| template<class T , std::size_t N> | 
| tag | swap (T(&a)[N], T(&b)[N]) | 
|  | 
| template<class , class > | 
| std::false_type | can_swap (...) noexcept(false) | 
|  | 
| template<class T , class U , class  = decltype(swap(std::declval<T &>(), std::declval<U &>()))> | 
| std::true_type | can_swap (int) noexcept(noexcept(swap(std::declval< T & >(), std::declval< U & >()))) | 
|  | 
| template<class , class > | 
| std::false_type | uses_std (...) | 
|  | 
| template<class T , class U > | 
| std::is_same< decltype(swap(std::declval< T & >(), std::declval< U & >())), tag > | uses_std (int) | 
|  |