blob: 6fe3b25259fd7a646759a54c195623641bfb050c [file] [log] [blame]
Douglas Gregor1a22d282012-02-12 17:34:23 +00001// 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) {
Douglas Gregor74f7d502012-02-15 19:33:52 +000010 auto lambda1 = [i]() { }; // expected-note 2 {{lambda expression begins here}}
Douglas Gregor1a22d282012-02-12 17:34:23 +000011
12 // Default constructor
Douglas Gregor74f7d502012-02-15 19:33:52 +000013 decltype(lambda1) lambda2; // expected-error{{call to implicitly-deleted default constructor of 'decltype(lambda1)' (aka '<lambda}}
Douglas Gregor1a22d282012-02-12 17:34:23 +000014
15 // Copy assignment operator
Douglas Gregor74f7d502012-02-15 19:33:52 +000016 lambda1 = lambda1; // expected-error{{overload resolution selected implicitly-deleted copy assignment operator}}
Douglas Gregor1a22d282012-02-12 17:34:23 +000017
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}