p8.cpp revision 93e2fa488740a68604a4069ac61eba398de7275d
193962e5360a43200faa70939571afc4fb9326cf7Douglas Gregor// RUN: %clang_cc1 -std=c++11 %s -verify
293962e5360a43200faa70939571afc4fb9326cf7Douglas Gregor
393962e5360a43200faa70939571afc4fb9326cf7Douglas Gregorclass X0 {
493962e5360a43200faa70939571afc4fb9326cf7Douglas Gregor  void explicit_capture() {
593962e5360a43200faa70939571afc4fb9326cf7Douglas Gregor    int foo;
693962e5360a43200faa70939571afc4fb9326cf7Douglas Gregor
7b326ca8ffbea96f9cc8a457b0f57be880304a6f5Douglas Gregor    (void)[foo, foo] () {}; // expected-error {{'foo' can appear only once}}
8b326ca8ffbea96f9cc8a457b0f57be880304a6f5Douglas Gregor    (void)[this, this] () {}; // expected-error {{'this' can appear only once}}
9b326ca8ffbea96f9cc8a457b0f57be880304a6f5Douglas Gregor    (void)[=, foo] () {}; // expected-error {{'&' must precede a capture when}}
10b326ca8ffbea96f9cc8a457b0f57be880304a6f5Douglas Gregor    (void)[=, &foo] () {};
11b326ca8ffbea96f9cc8a457b0f57be880304a6f5Douglas Gregor    (void)[=, this] () {}; // expected-error {{'this' cannot appear}}
12b326ca8ffbea96f9cc8a457b0f57be880304a6f5Douglas Gregor    (void)[&, foo] () {};
13b326ca8ffbea96f9cc8a457b0f57be880304a6f5Douglas Gregor    (void)[&, &foo] () {}; // expected-error {{'&' cannot precede a capture when}}
14b326ca8ffbea96f9cc8a457b0f57be880304a6f5Douglas Gregor    (void)[&, this] () {};
1593962e5360a43200faa70939571afc4fb9326cf7Douglas Gregor  }
1693962e5360a43200faa70939571afc4fb9326cf7Douglas Gregor};
1793e2fa488740a68604a4069ac61eba398de7275dDouglas Gregor
1893e2fa488740a68604a4069ac61eba398de7275dDouglas Gregorstruct S2 { void f(int i); };
1993e2fa488740a68604a4069ac61eba398de7275dDouglas Gregor
2093e2fa488740a68604a4069ac61eba398de7275dDouglas Gregorvoid S2::f(int i) {
2193e2fa488740a68604a4069ac61eba398de7275dDouglas Gregor  (void)[&, i]{ };
2293e2fa488740a68604a4069ac61eba398de7275dDouglas Gregor  (void)[&, &i]{ }; // expected-error{{'&' cannot precede a capture when the capture default is '&'}}
2393e2fa488740a68604a4069ac61eba398de7275dDouglas Gregor  (void)[=, this]{ }; // expected-error{{'this' cannot appear in a capture list when the capture default is '='}}
2493e2fa488740a68604a4069ac61eba398de7275dDouglas Gregor  (void)[i, i]{ }; // expected-error{{'i' can appear only once in a capture list}}
2593e2fa488740a68604a4069ac61eba398de7275dDouglas Gregor}
26