| 1 | // RUN: %clang_cc1 -std=c++11 %s -verify -Wno-c++1y-extensions |
| 2 | |
| 3 | class X0 { |
| 4 | void explicit_capture() { |
| 5 | int foo; |
| 6 | |
| 7 | (void)[foo, foo] () {}; // expected-error {{'foo' can appear only once}} |
| 8 | (void)[this, this] () {}; // expected-error {{'this' can appear only once}} |
| 9 | (void)[=, foo] () {}; // expected-error {{'&' must precede a capture when}} |
| 10 | (void)[=, &foo] () {}; |
| 11 | (void)[=, this] () {}; // expected-warning {{C++2a extension}} |
| 12 | (void)[&, foo] () {}; |
| 13 | (void)[&, &foo] () {}; // expected-error {{'&' cannot precede a capture when}} |
| 14 | (void)[&, this] () {}; |
| 15 | } |
| 16 | }; |
| 17 | |
| 18 | struct S2 { |
| 19 | void f(int i); |
| 20 | void g(int i); |
| 21 | }; |
| 22 | |
| 23 | void S2::f(int i) { |
| 24 | (void)[&, i]{ }; |
| 25 | (void)[&, &i]{ }; // expected-error{{'&' cannot precede a capture when the capture default is '&'}} |
| 26 | (void)[=, this]{ }; // expected-warning{{C++2a extension}} |
| 27 | (void)[=]{ this->g(i); }; |
| 28 | (void)[i, i]{ }; // expected-error{{'i' can appear only once in a capture list}} |
| 29 | (void)[i(0), i(1)]{ }; // expected-error{{'i' can appear only once in a capture list}} |
| 30 | (void)[i, i(1)]{ }; // expected-error{{'i' can appear only once in a capture list}} |
| 31 | (void)[i(0), i]{ }; // expected-error{{'i' can appear only once in a capture list}} |
| 32 | } |
| 33 | |