Douglas Gregor | 1a22d28 | 2012-02-12 17:34:23 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -std=c++11 %s -Wunused -verify |
| 2 | |
| 3 | struct MoveOnly { |
| 4 | MoveOnly(MoveOnly&&); |
| 5 | MoveOnly(const MoveOnly&); |
| 6 | }; |
| 7 | |
| 8 | template<typename T> T &&move(T&); |
| 9 | void test_special_member_functions(MoveOnly mo, int i) { |
Richard Smith | 80f57f6 | 2014-12-10 20:04:48 +0000 | [diff] [blame] | 10 | auto lambda1 = [i]() { }; // expected-note {{lambda expression begins here}} expected-note 2{{candidate}} |
Douglas Gregor | 1a22d28 | 2012-02-12 17:34:23 +0000 | [diff] [blame] | 11 | |
| 12 | // Default constructor |
Richard Smith | 80f57f6 | 2014-12-10 20:04:48 +0000 | [diff] [blame] | 13 | decltype(lambda1) lambda2; // expected-error{{no matching constructor}} |
Douglas Gregor | 1a22d28 | 2012-02-12 17:34:23 +0000 | [diff] [blame] | 14 | |
| 15 | // Copy assignment operator |
Richard Smith | de1a487 | 2012-12-28 12:23:24 +0000 | [diff] [blame] | 16 | lambda1 = lambda1; // expected-error{{copy assignment operator is implicitly deleted}} |
Douglas Gregor | 1a22d28 | 2012-02-12 17:34:23 +0000 | [diff] [blame] | 17 | |
| 18 | // Move assignment operator |
| 19 | lambda1 = move(lambda1); |
| 20 | |
| 21 | // Copy constructor |
| 22 | decltype(lambda1) lambda3 = lambda1; |
| 23 | decltype(lambda1) lambda4(lambda1); |
| 24 | |
| 25 | // Move constructor |
| 26 | decltype(lambda1) lambda5 = move(lambda1); |
| 27 | decltype(lambda1) lambda6(move(lambda1)); |
| 28 | } |