tidy - cppcoreguidelines-misleading-capture-default-by-value — Extra Clang Tools 22.0.0git documentation (original) (raw)

Warns when lambda specify a by-value capture default and capture this.

By-value capture defaults in member functions can be misleading about whether data members are captured by value or reference. This occurs because specifying the capture default [=] actually captures the this pointer by value, not the data members themselves. As a result, data members are still indirectly accessed via the captured this pointer, which essentially means they are being accessed by reference. Therefore, even when using [=], data members are effectively captured by reference, which might not align with the user’s expectations.

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 F.54from the C++ Core Guidelines.