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