| // RUN: %clang_cc1 -fsyntax-only -std=c++11 %s | 
 |  | 
 | template <class T> | 
 | T&& | 
 | declval() noexcept; | 
 |  | 
 | template <class T> | 
 | struct some_trait | 
 | { | 
 |     static const bool value = false; | 
 | }; | 
 |  | 
 | template <class T> | 
 | void swap(T& x, T& y) noexcept(some_trait<T>::value) | 
 | { | 
 |     T tmp(static_cast<T&&>(x)); | 
 |     x = static_cast<T&&>(y); | 
 |     y = static_cast<T&&>(tmp); | 
 | } | 
 |  | 
 | template <class T, unsigned N> | 
 | struct array | 
 | { | 
 |     T data[N]; | 
 |  | 
 |     void swap(array& a) noexcept(noexcept(swap(declval<T&>(), declval<T&>()))); | 
 | }; | 
 |  | 
 | struct DefaultOnly | 
 | { | 
 |     DefaultOnly() = default; | 
 |     DefaultOnly(const DefaultOnly&) = delete; | 
 |     DefaultOnly& operator=(const DefaultOnly&) = delete; | 
 |     ~DefaultOnly() = default; | 
 | }; | 
 |  | 
 | int main() | 
 | { | 
 |     array<DefaultOnly, 1> a, b; | 
 | } | 
 |  |