1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -std=c++11 %s 2*67e74705SXin Li 3*67e74705SXin Li template <class T> 4*67e74705SXin Li T&& 5*67e74705SXin Li declval() noexcept; 6*67e74705SXin Li 7*67e74705SXin Li template <class T> 8*67e74705SXin Li struct some_trait 9*67e74705SXin Li { 10*67e74705SXin Li static const bool value = false; 11*67e74705SXin Li }; 12*67e74705SXin Li 13*67e74705SXin Li template <class T> swap(T & x,T & y)14*67e74705SXin Livoid swap(T& x, T& y) noexcept(some_trait<T>::value) 15*67e74705SXin Li { 16*67e74705SXin Li T tmp(static_cast<T&&>(x)); 17*67e74705SXin Li x = static_cast<T&&>(y); 18*67e74705SXin Li y = static_cast<T&&>(tmp); 19*67e74705SXin Li } 20*67e74705SXin Li 21*67e74705SXin Li template <class T, unsigned N> 22*67e74705SXin Li struct array 23*67e74705SXin Li { 24*67e74705SXin Li T data[N]; 25*67e74705SXin Li 26*67e74705SXin Li void swap(array& a) noexcept(noexcept(::swap(declval<T&>(), declval<T&>()))); 27*67e74705SXin Li }; 28*67e74705SXin Li 29*67e74705SXin Li struct DefaultOnly 30*67e74705SXin Li { 31*67e74705SXin Li DefaultOnly() = default; 32*67e74705SXin Li DefaultOnly(const DefaultOnly&) = delete; 33*67e74705SXin Li DefaultOnly& operator=(const DefaultOnly&) = delete; 34*67e74705SXin Li ~DefaultOnly() = default; 35*67e74705SXin Li }; 36*67e74705SXin Li main()37*67e74705SXin Liint main() 38*67e74705SXin Li { 39*67e74705SXin Li array<DefaultOnly, 1> a, b; 40*67e74705SXin Li } 41*67e74705SXin Li 42