<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/56920>56920</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Incorrect -Wunused-lambda-capture
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
mjaffaj
</td>
</tr>
</table>
<pre>
The following code causes -Wunused-lambda-capture on Clang 14.
https://godbolt.org/z/nna4q3jxo
``` C++
#include <algorithm>
#include <memory>
#include <vector>
class Foo
{
public:
void reset() {}
};
template <class T>
class Bar
{
public:
using const_iterator = typename std::vector<T>::const_iterator;
void reset()
{
std::for_each(
_v.begin(),
_v.end(),
/// Changing any one of the following does not cause -Wunused-lambda-capture
/// [ this] to [ = ], [ & ]
/// toReference(v).reset to this->toReference(v).reset()
/// (auto& v) to (T& v)
/// Removing member function: Foo& toReference(const_iterator it) const
[ this ](auto& v){ toReference(v).reset(); }
);
}
private:
Foo& toReference(const_iterator it) const
{
return toReference(*it);
}
Foo& toReference(const T& object) const
{
if constexpr (std::is_pointer<decltype(object.get())>::value)
{
return *object.get();
}
else
{
return object.get();
}
}
std::vector<T> _v;
};
int main()
{
Bar<std::unique_ptr<Foo>> myBar;
myBar.reset();
return 0;
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJydVU2PozgQ_TVwsRKB-QgcOHQn09JeRy3NMTJQSdwyNmMMM9lfP2WTkJBO0rMrudPYVX71qvzKLlV9LN4PQHZKCPWLyz2pVA2kYn0HHVn86CV-1AvBmrJmi4q1ptdAlCRrwdA5jJdesPGCl4MxbedFLx59w7FXdamEWSq9x9m_-Ccli39GH7_V6H76TYNxkLVHX-0Yl2nEZSV65OFFayb2SnNzaLzo2z17A43SxwfGASqj9MXofivBuo68qTOX1Slu25eCVzaJk3M-KF4TDR0Yj2YezYn1XW3O-zZe9HoNbKBpBTMu8hjkfQo9zl-Z_jJo343HIDuz5QY0wwwQcUPMsQXJGiCdqe2G6OWc3trFcUvzfTcE76Q0GSZG9jvIpxg7pbfAqoN1v7KPYzssS9hzecKi67suIOsnDqNkcJD1ATVlk2fyiBpDne2ImYmzVqhKqcwo0Ef6fBbDS14Rk3deggVVbmpri1MkN05p6qZPQIz6DjvQICvAxAbMbOlKahEt-AKP45HPbdnvUKQZ642yPOw2R5Nm7-f5s63fsRkGWyjsihI02fWyMlxJPEcneISY87qRGTc2oFu8E-ZUurFYM44onodFOSUcYWVX86q61SsBbq612mo-YC9dd8b_zmAubQ0oEnkD49EXt_UJo6cMiDsfVX5gS37JgO9GO_xutT3bqdl4t20Vl5gMNnUNlbA9jw4j7nI_VdMSPXX8wEQPt7qYx7skjWl-wormvvNDAtHBXyH_F9hPdb1_o5HtcEH5dNtimUjDprtnfq0ipr1ro_WE3Ev-s4dta-yqPUdbv2-kOTq_yza3cKPcyXjKNZjRuvei-VCEaZKnQZon1K-LqM6jnPmGGwHFP7JSWmOmjy4wv9eiuHlS8Qnsy2WlGpwIMZz_LVqtRs298a7rocOPJM1p4B8KGoerVcTiJAzTOI3ZKq7DKkuzVViziLLMF6zE8y2wsT1KJfwiDgK_scN9XtCA0iAL4iBPkiRcZklYR8BYnZV5kJbMiwPAAxBLy8O-9b4uHKWy33doFLwz3cWI7x_fSwAXDvHx_jgoXTQfbLdjH74LXTjqfwAf0Wan">