<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/61029>61029</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Wrong error about not capturing an already local variable
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
JohelEGP
</td>
</tr>
</table>
<pre>
The original code from #57958 still fails.
See https://godbolt.org/z/MbYYYKfv1.
```C++
#include <type_traits>
template<auto F> concept constant_invocable = requires { typename std::integral_constant<int, (F(), 0)>; };
template<class T>
constexpr bool C =
[](auto) {
return not constant_invocable<[]() {
T v;
(void)T{v};
}>;
}(0);
static_assert(C<int>);
```
```console
<source>:10:15: warning: variable 'v' is uninitialized when used here [-Wuninitialized]
(void)T{v};
^
<source>:14:15: note: in instantiation of variable template specialization 'C<int>' requested here
static_assert(C<int>);
^
<source>:9:10: note: initialize the variable 'v' to silence this warning
T v;
^
= 0
<source>:10:15: error: variable 'v' cannot be implicitly captured in a lambda with no capture-default specified
(void)T{v};
^
<source>:7:3: note: in instantiation of function template specialization '(anonymous class)::operator()<int>' requested here
[](auto) {
^
<source>:14:15: note: in instantiation of variable template specialization 'C<int>' requested here
static_assert(C<int>);
^
<source>:9:9: note: 'v' declared here
T v;
^
<source>:8:35: note: lambda expression begins here
return not constant_invocable<[]() {
^
<source>:8:36: note: capture 'v' by value
return not constant_invocable<[]() {
^
v
<source>:8:36: note: capture 'v' by reference
return not constant_invocable<[]() {
^
&v
<source>:8:36: note: default capture by value
return not constant_invocable<[]() {
^
=
<source>:8:36: note: default capture by reference
return not constant_invocable<[]() {
^
&
1 warning and 1 error generated.
Compiler returned: 1
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcll1v6jgTxz_NcDNqFexCkotcAIVHelYrrbSVjnpVOfEEvDJ21nbocj79ynmhlNO309OrRVESv__mP8NkhPdqa4gKmC1hdjsRbdhZV_zf7kiv__fHpLTyWNztCK1TW2WExspKwtrZPQLjszSfZeiD0hprobS_huQWksWfRLgLofHAF8A2wDZbK0urw7V1W2Cb78A2v5f39_e_1YfpsAbmSX-tgC3j1fcyrkylW0kIfBWODT0EJ1TwwNfDjO4eaN9oEQj4SrTB4gb4GitrKmpCfPogTHhQ5mArUeq42S06-rtVjjxCusS4tRF7Qh9kpOYLZQJtndAP43LgK2UCsBUCyzbAMmB5bCXxydfAlwjpLfDlK2CVFt7j3Ym825f-aRyW1mpcRah-BLH3B7AsWgMsj4zjGKKj0DqDxr5kG_DVafUPKxHv8HBC7HuAZQerJLD8DtLl4dyGbji2109dsc2y3uhnpvoggqoehPfkArBsNQjG18_mjn6-aEZDrKahl6-8bV1F3cmLaRJvM-ALfBTOKLONrwfhVO9Mlh6Apag8tkYZFZTQ6jtJfNyRwdaTxB05iqJefXs2I6o0WPW2CE8_mK1fZrw5MRob_b1AZVD13lEiKGvQ1k_QY2Cgb6jqcPo5wNJz4dIuTMmHwYifkfpj4Pko8Bn3KBCGHf2oc7DolSZTxXHlTz55LcpOJ5_B8FtM3vM1OWfdi56uhInBXxKqfaNVpYI-YiWa0DqSUXeBWuxLKfBRhR0aOw5eSapFq0Oveq1IfpX_U-AL_p7369ZU3fsb3o9_emPNcW9bj13O6HwaU5JtyIlg3ZB73ouSt9PIfzKQ83PsMVokVVq4C2lezoWv755F_z5TZYiwmMHJ-2hySVtl_MUxn0zWb3LMzzmG0D6ZWx7xIHQ7Ivzq-fj-7_B5Ukc1uZhKvk6wDwADm3-UeUwYI_uFur_4NX6b8mTRqTL4DO7XSfxTyGzev03H7wMKI3HaZ3Xckom5jORQ_q3svlGa3IBGsQjD6UWNMJEFlznPxYSK6TxNZ9NZmiSTXSHmlKYyKUsuS6I64bKqZ3Upbm7y6UzW9UQVLGE8YSydzvksSa4zSvJ5kuRZxac8zQhuEtoLpa-1PuxjmTpR3rdUzKcJyydalKR9VyUzZugRu0FgLBbNrohrrsp26-Em0coH_7RLUEFT8c1Zsx0sF6VtQy9956NeGRTakZBH1LYS-pRdJ63TxUUprcKuLa8ruwe2iecMj6vG2b-oCsA2HZ0Htuno_w0AAP__U1NrAQ">