Richard Smith | 762bb9d | 2011-10-13 22:29:44 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -fsyntax-only -std=c++11 %s |
Sean Hunt | eea06c6 | 2011-05-31 19:54:49 +0000 | [diff] [blame] | 2 | |
| 3 | template <class T> |
| 4 | T&& |
| 5 | declval() noexcept; |
| 6 | |
| 7 | template <class T> |
| 8 | struct some_trait |
| 9 | { |
| 10 | static const bool value = false; |
| 11 | }; |
| 12 | |
| 13 | template <class T> |
| 14 | void swap(T& x, T& y) noexcept(some_trait<T>::value) |
| 15 | { |
| 16 | T tmp(static_cast<T&&>(x)); |
| 17 | x = static_cast<T&&>(y); |
| 18 | y = static_cast<T&&>(tmp); |
| 19 | } |
| 20 | |
| 21 | template <class T, unsigned N> |
| 22 | struct array |
| 23 | { |
| 24 | T data[N]; |
| 25 | |
Richard Smith | 6deb820 | 2012-05-02 01:29:43 +0000 | [diff] [blame] | 26 | void swap(array& a) noexcept(noexcept(swap(declval<T&>(), declval<T&>()))); |
Sean Hunt | eea06c6 | 2011-05-31 19:54:49 +0000 | [diff] [blame] | 27 | }; |
| 28 | |
| 29 | struct DefaultOnly |
| 30 | { |
| 31 | DefaultOnly() = default; |
| 32 | DefaultOnly(const DefaultOnly&) = delete; |
| 33 | DefaultOnly& operator=(const DefaultOnly&) = delete; |
| 34 | ~DefaultOnly() = default; |
| 35 | }; |
| 36 | |
| 37 | int main() |
| 38 | { |
| 39 | array<DefaultOnly, 1> a, b; |
| 40 | } |