<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/106709>106709</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
In clang-tidy automated fix `modernize-use-trailing-return-type` should be applied after `readability-make-member-function-const`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang-tidy
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
srpgilles
</td>
</tr>
</table>
<pre>
I wrote for a quick lecture to introduce clang-tidy to my colleagues a faulty C++ snippet upon which I intended to run clang-tidy:
```c++
#include <iostream>
class Circle
{
public:
Circle(double radius);
double ComputeArea();
double radius_;
};
Circle::Circle(double radius)
{
radius_ = radius;
}
double Circle::ComputeArea()
{
return 3.14159 * radius_ * radius_;
}
int main([[maybe_unused]] int argc, [[maybe_unused]] char** argv)
{
Circle circle(2);
std::cout << "Area of circle is " << circle.ComputeArea() << std::endl;
return 0;
}
```
I discovered however on this simple example that `modernize-use-trailing-return-type` and `readability-make-member-function-const` are at odds:
```shell
clang-tidy main.cpp --fix -checks="-*,modernize-use-trailing-return-type,readability-make-member-function-const" -- -Weverything -std=c++20 -x c++
```
will yield for `ComputeArea()` the signature:
```c++
auto ComputeArea() -> double const;
```
which is not what is intended (and of course `clang-tidy` still complains about the missing `const`).
There are of course workarounds if we want the two checks enabled:
- Run the `clang-tidy` command fix twice. We end up with
```c++
auto ComputeArea() const -> double const;
```
which is a bit more bloated that it should be (and trigger the compiler warning `clang-diagnostic-ignored-qualifiers`).
- Run the `clang-tidy` first without the `modernize-use-trailing-return-type`, and then run it with this check.
It would be better of course if this was handled properly automatically, hence this ticket!
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVktv2zgQ_jX0ZSBDpmzFPviQ2A2Q62KBHguKHEuzoUiVj6jeX7-gHonaOEW2QEDF5Dy_b_hJwnuqDeKR7R7Y7rwSMTTWHb3ratIa_aqy6np8gt7ZgHCxDgR8jySfQaMM0SEEC2SCsypKBKmFqbNA6pr22ytIqzWKOqIHARcRdbjCifEHxh_AG-o6DBA7a6BvSDbwlGKhUaiSv4tmEZEV9yw_s3xey3z8k2O4aZcXZKSOCoEVJ7I-OBQtK74sXaUW3sOJnNQ47d89LA0AALpYaZK_JE0Hkx_fKxsrjeCEougZP7Di5yDT-cm2XQx471Awvr9hBwA_hfr2ZnB3_sV4XKcSintW3H9czs-dpTRTfGDFebZbplpkmGtfJnrXx40EGKIzUKw3283uAIzfv-V8-_-jpMuVTIBWkEmp0mg-tOJa4bdookfFdme2O6dZAeFqyfgJPjSSjXCM36f0wtUvt-se-wQ5Y8lv0OSDGoGQNoY0Xaw4AeM8AQL2MjkD-bQ5n4-b63fYzeevQdEofWMwJkDzG5DN8790eQJFXtoXdKigsT2-oANrIDTkwVPbaQT8IYZnaEQAVuatVegM_YtZ9JgFJ0iTqbMxcxauHbIyB2FUMnYolKhIU7hmrXjGrMW2QpddopGBrMmkNT4MDg5BBLBK-Y9urm9Q69crOQtHYn0tuw6y7EI_IJMNymfPijPjPBuYPH2iZH76ZKmcQ5ZB9jVBdQ0NmRogG2g5T8rCc8h-wPQDfoN-T1rDlVCrQSlZmb-_M2UOoUFIqiuSfn5K1UQM9r2OQMaKL7N0jM28TsnN8gaJJQ_GBugT--Tf9JbxfeI4DbKNzmMqfyG-ZQ4-pP6kbTstyHgQVboIqZuWvE_AJZeJf8YP6_e3-u8G01g4XOTprXsWzkajPNAFeoRemDFu6C2M9AMaUWlUv8CVwV_RDKbvqpW2bVNDaYZCTxLX8BUBjYLYQU-h-WPYhxb_GHwBFQVorUOotBUhveoGLgL4xkatoMKZjOCortENDSbcSaODXjgzgz10rEjUxvpAMqPaWIcq-x6Fpguh8zeo-A1oF3I-DOjM1H5WIJIGDyU3aIYXN41xRukZSLwxD08B-rnnCkNIavU6GHQZnXvhoRFGaVTQOduh01dI3LQikBRaX1PyBo3E0SGQfMbA-Oajl8tyXaljoQ7FQazwuLnju3yzK-6KVXPcHFRR7pQqD-WmkpfNPpel3Oe7Sm125bbarejIc77N90W-yXflplhjsVdiu5WVLHKF1YZtc2wF6bXWL-3aunpF3kc8bvLyLj-stKhQ--HLi_MFD5ynLzF3TF5ZFWvPtrkmH_xbnEBB4_Fp-Xk0I4LjyH9a2N-GTnSdJlQgLomH_yP2q-j0sQmhG6SePzL-WFNoYrWWtmX8MdU9PbLO2X9QBsYfBzA8448THi9H_l8AAAD__z_eO1g">