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