Files
clang-p2996/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp
Richard Smith 24ad121582 Add -std=c++20 flag, replace C++2a with C++20 throughout the Clang
user interface and documentation, and update __cplusplus for C++20.

WG21 considers the C++20 standard to be finished (even though it still
has some more steps to pass through in the ISO process).

The old flag names are accepted for compatibility, as usual, and we
still have lots of references to C++2a in comments and identifiers;
those can be cleaned up separately.
2020-02-18 16:16:37 -08:00

33 lines
1.2 KiB
C++

// RUN: %clang_cc1 -std=c++11 %s -verify -Wno-c++14-extensions
class X0 {
void explicit_capture() {
int foo;
(void)[foo, foo] () {}; // expected-error {{'foo' can appear only once}}
(void)[this, this] () {}; // expected-error {{'this' can appear only once}}
(void)[=, foo] () {}; // expected-error {{'&' must precede a capture when}}
(void)[=, &foo] () {};
(void)[=, this] () {}; // expected-warning {{C++20 extension}}
(void)[&, foo] () {};
(void)[&, &foo] () {}; // expected-error {{'&' cannot precede a capture when}}
(void)[&, this] () {};
}
};
struct S2 {
void f(int i);
void g(int i);
};
void S2::f(int i) {
(void)[&, i]{ };
(void)[&, &i]{ }; // expected-error{{'&' cannot precede a capture when the capture default is '&'}}
(void)[=, this]{ }; // expected-warning{{C++20 extension}}
(void)[=]{ this->g(i); };
(void)[i, i]{ }; // expected-error{{'i' can appear only once in a capture list}}
(void)[i(0), i(1)]{ }; // expected-error{{'i' can appear only once in a capture list}}
(void)[i, i(1)]{ }; // expected-error{{'i' can appear only once in a capture list}}
(void)[i(0), i]{ }; // expected-error{{'i' can appear only once in a capture list}}
}