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