Richard Smith | 5b013f5 | 2013-09-28 05:38:27 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -std=c++11 %s -verify -Wno-c++1y-extensions |
Douglas Gregor | 53a9bdf | 2012-02-01 01:18:43 +0000 | [diff] [blame] | 2 | |
| 3 | class X0 { |
| 4 | void explicit_capture() { |
| 5 | int foo; |
| 6 | |
Douglas Gregor | 656bc62 | 2012-02-09 08:26:42 +0000 | [diff] [blame] | 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] () {}; |
Douglas Gregor | a1bffa2 | 2012-02-10 17:46:20 +0000 | [diff] [blame] | 11 | (void)[=, this] () {}; // expected-error {{'this' cannot be explicitly captured}} |
Douglas Gregor | 656bc62 | 2012-02-09 08:26:42 +0000 | [diff] [blame] | 12 | (void)[&, foo] () {}; |
| 13 | (void)[&, &foo] () {}; // expected-error {{'&' cannot precede a capture when}} |
| 14 | (void)[&, this] () {}; |
Douglas Gregor | 53a9bdf | 2012-02-01 01:18:43 +0000 | [diff] [blame] | 15 | } |
| 16 | }; |
Douglas Gregor | 136b2f2 | 2012-02-10 09:37:05 +0000 | [diff] [blame] | 17 | |
Douglas Gregor | a1bffa2 | 2012-02-10 17:46:20 +0000 | [diff] [blame] | 18 | struct S2 { |
| 19 | void f(int i); |
| 20 | void g(int i); |
| 21 | }; |
Douglas Gregor | 136b2f2 | 2012-02-10 09:37:05 +0000 | [diff] [blame] | 22 | |
| 23 | void S2::f(int i) { |
| 24 | (void)[&, i]{ }; |
| 25 | (void)[&, &i]{ }; // expected-error{{'&' cannot precede a capture when the capture default is '&'}} |
Douglas Gregor | a1bffa2 | 2012-02-10 17:46:20 +0000 | [diff] [blame] | 26 | (void)[=, this]{ }; // expected-error{{'this' cannot be explicitly captured}} |
| 27 | (void)[=]{ this->g(i); }; |
Douglas Gregor | 136b2f2 | 2012-02-10 09:37:05 +0000 | [diff] [blame] | 28 | (void)[i, i]{ }; // expected-error{{'i' can appear only once in a capture list}} |
Richard Smith | ba71c08 | 2013-05-16 06:20:58 +0000 | [diff] [blame] | 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}} |
Douglas Gregor | 136b2f2 | 2012-02-10 09:37:05 +0000 | [diff] [blame] | 32 | } |