cppcoreguidelines-avoid-capture-default-when-capturing-this

Warns when lambda specify a capture default and capture this.

Capture-defaults in member functions can be misleading about whether data members are captured by value or reference. For example, specifying the capture default [=] will still capture data members by reference.

Examples:

struct AClass {
  int member;
  void misleadingLogic() {
    int local = 0;
    member = 0;
    auto f = [=]() mutable {
      local += 1;
      member += 1;
    };
    f();
    // Here, local is 0 but member is 1
  }

  void clearLogic() {
    int local = 0;
    member = 0;
    auto f = [this, local]() mutable {
      local += 1;
      member += 1;
    };
    f();
    // Here, local is 0 but member is 1
  }
};

This check implements CppCoreGuideline F.54.