Clang Project

clang_source_code/test/SemaCXX/cxx2a-lambda-equals-this.cpp
1// RUN: %clang_cc1 -std=c++2a -verify %s -Wdeprecated
2
3// This test does two things.
4// Deleting the copy constructor ensures that an [=, this] capture doesn't copy the object.
5// Accessing a member variable from the lambda ensures that the capture actually works.
6class A {
7  A(const A &) = delete;
8  int i;
9
10  void func() {
11    auto L = [=, this]() -> int { return i; };
12    L();
13  }
14};
15
16struct B {
17  int i;
18  void f() {
19    (void) [=] { // expected-note {{add an explicit capture of 'this'}}
20      return i; // expected-warning {{implicit capture of 'this' with a capture default of '=' is deprecated}}
21    };
22  }
23};
24