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 Gregorvoid 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