// 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; }