[clang] [clang-tools-extra] [clang-tidy] Add readability-avoid-default-lambda-capture (PR #160150)
JJ Marr via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 9 06:30:43 PDT 2025
================
@@ -0,0 +1,57 @@
+.. title:: clang-tidy - readability-avoid-default-lambda-capture
+
+readability-avoid-default-lambda-capture
+========================================
+
+Warns on default lambda captures (e.g. ``[&](){ ... }``, ``[=](){ ... }``).
+
+Captures can lead to subtle bugs including dangling references and unnecessary
+copies. Writing out the name of the variables being captured reminds programmers
+and reviewers to know what is being captured. And knowing is half the battle.
+
+This check does not lint for variable-length array (VLA) captures. VLAs are not
+ISO C++, and it is impossible to explicitly capture them as the syntax for doing
+so does not exist.
+
+Coding guidelines that recommend against defaulted lambda captures include:
+
+* Item 31 of Effective Modern C++ by Scott Meyers
+
+Example
+-------
+
+.. code-block:: c++
+
+ #include <iostream>
+
+ class Widget {
+ std::vector<std::function<void(int)>> callbacks;
+ int widgetId;
+ void addCallback(int factoryId) {
+ callbacks.emplace_back(
+ [&](){
+ std::cout << "Widget " << widgetId << " made in factory " << factoryId;
+ }
+ );
+ }
+ }
----------------
jjmarr-amd wrote:
I made up the example myself.
https://github.com/llvm/llvm-project/pull/160150
More information about the cfe-commits
mailing list