[llvm-branch-commits] [clang-tools-extra] [clang-tidy][docs] Rewrite modernize check docs to Markdown [1/4] (PR #232207)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Oct 15 08:06:53 PDT 2026
================
@@ -1,89 +1,90 @@
-.. title:: clang-tidy - modernize-avoid-bind
+```{title} clang-tidy - modernize-avoid-bind
+```
-modernize-avoid-bind
-====================
+# modernize-avoid-bind
-The check finds uses of ``std::bind`` and ``boost::bind`` and replaces them
+The check finds uses of `std::bind` and `boost::bind` and replaces them
with lambdas. Lambdas will use value-capture unless reference capture is
-explicitly requested with ``std::ref`` or ``boost::ref``.
+explicitly requested with `std::ref` or `boost::ref`.
It supports arbitrary callables including member functions, function objects,
and free functions, and all variations thereof. Anything that you can pass
-to the first argument of ``bind`` should be diagnosable. Currently, the only
+to the first argument of `bind` should be diagnosable. Currently, the only
known case where a fix-it is unsupported is when the same placeholder is
specified multiple times in the parameter list.
Given:
-.. code-block:: c++
-
- int add(int x, int y) { return x + y; }
+```c++
+int add(int x, int y) { return x + y; }
+```
Then:
-.. code-block:: c++
-
- void f() {
- int x = 2;
- auto clj = std::bind(add, x, _1);
- }
+```c++
+void f() {
+ int x = 2;
+ auto clj = std::bind(add, x, _1);
+}
+```
is replaced by:
-.. code-block:: c++
+```c++
+void f() {
+ int x = 2;
+ auto clj = [=](auto && arg1) { return add(x, arg1); };
+}
+```
- void f() {
- int x = 2;
- auto clj = [=](auto && arg1) { return add(x, arg1); };
- }
-
-``std::bind`` can be hard to read and can result in larger object files and
+`std::bind` can be hard to read and can result in larger object files and
binaries due to type information that will not be produced by equivalent
lambdas.
-Options
--------
-
-.. option:: PermissiveParameterList
-
- If the option is set to `true`, the check will append ``auto&&...`` to the end
- of every placeholder parameter list. Without this, it is possible for a fix-it
- to perform an incorrect transformation in the case where the result of the ``bind``
- is used in the context of a type erased functor such as ``std::function`` which
- allows mismatched arguments. Default is `false`.
-
-For example:
-
-.. code-block:: c++
+This check requires using C++14 or higher to run.
- int add(int x, int y) { return x + y; }
- int foo() {
- std::function<int(int,int)> ignore_args = std::bind(add, 2, 2);
- return ignore_args(3, 3);
- }
+## Options
-is valid code, and returns `4`. The actual values passed to ``ignore_args`` are
-simply ignored. Without ``PermissiveParameterList``, this would be transformed into
+(modernize-avoid-bind-permissive-parameter-list)=
-.. code-block:: c++
+````{option} PermissiveParameterList
+If the option is set to `true`, the check will append `auto&&...` to the end
+of every placeholder parameter list. Without this, it is possible for a fix-it
+to perform an incorrect transformation in the case where the result of the `bind`
+is used in the context of a type erased functor such as `std::function` which
+allows mismatched arguments. Default is `false`.
- int add(int x, int y) { return x + y; }
- int foo() {
- std::function<int(int,int)> ignore_args = [] { return add(2, 2); }
- return ignore_args(3, 3);
- }
+For example:
-which will *not* compile, since the lambda does not contain an ``operator()``
+```c++
+int add(int x, int y) { return x + y; }
+int foo() {
+ std::function<int(int,int)> ignore_args = std::bind(add, 2, 2);
+ return ignore_args(3, 3);
+}
+```
+
+is valid code, and returns `4`. The actual values passed to `ignore_args` are
+simply ignored. Without [`PermissiveParameterList`](#modernize-avoid-bind-permissive-parameter-list), this would be transformed into
----------------
EugeneZelenko wrote:
`{option}`?
https://github.com/llvm/llvm-project/pull/232207
More information about the llvm-branch-commits
mailing list