1864949bdSRichard Smith // RUN: %clang_cc1 -std=c++2a -verify %s
2864949bdSRichard Smith 
no_capture()3*793231c3SDavid Blaikie void no_capture() {
4*793231c3SDavid Blaikie   auto x = [] {};
5*793231c3SDavid Blaikie   decltype(x) y;
6*793231c3SDavid Blaikie   x = x;
7*793231c3SDavid Blaikie   x = static_cast<decltype(x)&&>(x);
8864949bdSRichard Smith }
9864949bdSRichard Smith 
capture_default(int i)10*793231c3SDavid Blaikie void capture_default(int i) {
11*793231c3SDavid Blaikie   auto x = [=] {}; // expected-note 2{{candidate constructor}} expected-note 2{{lambda expression begins here}}
12*793231c3SDavid Blaikie   decltype(x) y; // expected-error {{no matching constructor}}
13*793231c3SDavid Blaikie   x = x; // expected-error {{cannot be assigned}}
14*793231c3SDavid Blaikie   x = static_cast<decltype(x)&&>(x); // expected-error {{cannot be assigned}}
15864949bdSRichard Smith }
16864949bdSRichard Smith 
explicit_capture(int i)17*793231c3SDavid Blaikie void explicit_capture(int i) {
18*793231c3SDavid Blaikie   auto x = [i] {}; // expected-note 2{{candidate constructor}} expected-note 2{{lambda expression begins here}}
19*793231c3SDavid Blaikie   decltype(x) y; // expected-error {{no matching constructor}}
20*793231c3SDavid Blaikie   x = x; // expected-error {{cannot be assigned}}
21*793231c3SDavid Blaikie   x = static_cast<decltype(x)&&>(x); // expected-error {{cannot be assigned}}
22864949bdSRichard Smith }
23