2018-07-07 13:58:48 +08:00
|
|
|
// RUN: %clang_cc1 -std=c++2a -verify %s -Wdeprecated
|
2017-08-19 11:43:07 +08:00
|
|
|
|
|
|
|
// This test does two things.
|
|
|
|
// Deleting the copy constructor ensures that an [=, this] capture doesn't copy the object.
|
|
|
|
// Accessing a member variable from the lambda ensures that the capture actually works.
|
|
|
|
class A {
|
|
|
|
A(const A &) = delete;
|
|
|
|
int i;
|
|
|
|
|
|
|
|
void func() {
|
|
|
|
auto L = [=, this]() -> int { return i; };
|
|
|
|
L();
|
|
|
|
}
|
|
|
|
};
|
2018-07-07 13:58:48 +08:00
|
|
|
|
|
|
|
struct B {
|
|
|
|
int i;
|
|
|
|
void f() {
|
|
|
|
(void) [=] { // expected-note {{add an explicit capture of 'this'}}
|
|
|
|
return i; // expected-warning {{implicit capture of 'this' with a capture default of '=' is deprecated}}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
};
|