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