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.