p8.cpp revision 0d8e9646bc000bab521ce52ed294209a92298cef
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] () {}; 113ac109cd17151bb8ad3a40b0cbb0e1923cd6c4a0Douglas Gregor (void)[=, this] () {}; // expected-error {{'this' cannot be explicitly captured}} 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 183ac109cd17151bb8ad3a40b0cbb0e1923cd6c4a0Douglas Gregorstruct S2 { 193ac109cd17151bb8ad3a40b0cbb0e1923cd6c4a0Douglas Gregor void f(int i); 203ac109cd17151bb8ad3a40b0cbb0e1923cd6c4a0Douglas Gregor void g(int i); 213ac109cd17151bb8ad3a40b0cbb0e1923cd6c4a0Douglas Gregor}; 2293e2fa488740a68604a4069ac61eba398de7275dDouglas Gregor 2393e2fa488740a68604a4069ac61eba398de7275dDouglas Gregorvoid S2::f(int i) { 2493e2fa488740a68604a4069ac61eba398de7275dDouglas Gregor (void)[&, i]{ }; 2593e2fa488740a68604a4069ac61eba398de7275dDouglas Gregor (void)[&, &i]{ }; // expected-error{{'&' cannot precede a capture when the capture default is '&'}} 263ac109cd17151bb8ad3a40b0cbb0e1923cd6c4a0Douglas Gregor (void)[=, this]{ }; // expected-error{{'this' cannot be explicitly captured}} 273ac109cd17151bb8ad3a40b0cbb0e1923cd6c4a0Douglas Gregor (void)[=]{ this->g(i); }; 2893e2fa488740a68604a4069ac61eba398de7275dDouglas Gregor (void)[i, i]{ }; // expected-error{{'i' can appear only once in a capture list}} 290d8e9646bc000bab521ce52ed294209a92298cefRichard Smith (void)[i(0), i(1)]{ }; // expected-error{{'i' can appear only once in a capture list}} 300d8e9646bc000bab521ce52ed294209a92298cefRichard Smith (void)[i, i(1)]{ }; // expected-error{{'i' can appear only once in a capture list}} 310d8e9646bc000bab521ce52ed294209a92298cefRichard Smith (void)[i(0), i]{ }; // expected-error{{'i' can appear only once in a capture list}} 3293e2fa488740a68604a4069ac61eba398de7275dDouglas Gregor} 33