1// RUN: %clang_cc1 -std=c++11 %s -Wunused -verify
2
3struct MoveOnly {
4  MoveOnly(MoveOnly&&);
5  MoveOnly(const MoveOnly&);
6};
7
8template<typename T> T &&move(T&);
9void test_special_member_functions(MoveOnly mo, int i) {
10  auto lambda1 = [i]() { }; // expected-note 2 {{lambda expression begins here}}
11
12  // Default constructor
13  decltype(lambda1) lambda2; // expected-error{{call to implicitly-deleted default constructor of 'decltype(lambda1)' (aka '(lambda}}
14
15  // Copy assignment operator
16  lambda1 = lambda1; // expected-error{{copy assignment operator is implicitly deleted}}
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}
29