xref: /llvm-project/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp (revision 87a036259bb47624f9257b1d247fd50162b2734d)
1*87a03625SMalcolm Parsons // RUN: %clang_cc1 -std=c++11 %s -Wunused -Wno-unused-lambda-capture -verify
21a22d288SDouglas Gregor 
31a22d288SDouglas Gregor struct MoveOnly {
41a22d288SDouglas Gregor   MoveOnly(MoveOnly&&);
51a22d288SDouglas Gregor   MoveOnly(const MoveOnly&);
61a22d288SDouglas Gregor };
71a22d288SDouglas Gregor 
81a22d288SDouglas Gregor template<typename T> T &&move(T&);
test_special_member_functions(MoveOnly mo,int i)91a22d288SDouglas Gregor void test_special_member_functions(MoveOnly mo, int i) {
10ca185797SRichard Smith   auto lambda1 = [i]() { }; // expected-note 2{{lambda expression begins here}} expected-note 2{{candidate}}
111a22d288SDouglas Gregor 
121a22d288SDouglas Gregor   // Default constructor
1380f57f68SRichard Smith   decltype(lambda1) lambda2; // expected-error{{no matching constructor}}
141a22d288SDouglas Gregor 
151a22d288SDouglas Gregor   // Copy assignment operator
16de1a4874SRichard Smith   lambda1 = lambda1; // expected-error{{copy assignment operator is implicitly deleted}}
171a22d288SDouglas Gregor 
181a22d288SDouglas Gregor   // Move assignment operator
19ca185797SRichard Smith   lambda1 = move(lambda1); // expected-error{{copy assignment operator is implicitly deleted}}
201a22d288SDouglas Gregor 
211a22d288SDouglas Gregor   // Copy constructor
221a22d288SDouglas Gregor   decltype(lambda1) lambda3 = lambda1;
231a22d288SDouglas Gregor   decltype(lambda1) lambda4(lambda1);
241a22d288SDouglas Gregor 
251a22d288SDouglas Gregor   // Move constructor
261a22d288SDouglas Gregor   decltype(lambda1) lambda5 = move(lambda1);
271a22d288SDouglas Gregor   decltype(lambda1) lambda6(move(lambda1));
281a22d288SDouglas Gregor }
29