<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/96753>96753</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Clang allows invalid type conversion of lambda from 'void' to 'int' in default argument and template class
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Rush10233
</td>
</tr>
</table>
<pre>
The following code contains an invalid type conversion:
```c++
template <int>
struct S
{
friend void foo (int a = []{
[&](){
return 0;
}();
}()) {}
};
S<0> t;
```
In line 4 , the default argument value of the integer variable `a` is set to a nested lambda expression with the inner one returning an integer and the outer one returning nothing. The code compiles well in clang, while GCC outputs the following error message:
```c++
<source>: In instantiation of 'struct S<0>':
<source>:10:6: required from here
10 | S<0> t;
| ^
<source>:8:2: error: could not convert '<lambda closure object>S<0>::<lambda()>().S<0>::<lambda()>()' from 'void' to 'int'
4 | friend void foo (int a = []{
| ~~~
5 | [&](){
| ~~~~~~~~~~~~~~
6 | return 0;
| ~~~~~~~~~
7 | }();
| ~~~~
8 | }()) {}
| ~^~
| |
| void
<source>:4:15: note: when instantiating default argument for call to 'void foo(int) [with int <anonymous> = 0]'
4 | friend void foo (int a = []{
| ^~~
```
Please note that if we replace the template class `S` with a non-template one, clang rejects the code by giving a similar error message with GCC.
[https://godbolt.org/z/v1Gs3Kcf6](https://godbolt.org/z/v1Gs3Kcf6)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVdFyqzYQ_Rr5Zed6QDJgHnhIsJ2505dO0x8QsIA6QnIlYTd9yLd3JLCJY6eT69FgWB2ttLtnj7i1olOIBUmeSbJb8dH12hR_jLaPI8rYqtLNW_Fnj9BqKfVZqA5q3SDUWjkulAWuQKgTl6IB93YMEyc0VmhF2BOJdiS6PNNoGjWhz34Eq8PhKLlDIKwUyhG2h2nCOjPWDl7nxdmMB2iNQNXASYsGWq2B0K1QDjgQtoMpjA9oCCaaeivdEpovcwbdaBREhD3DB3h2AbKrk8VGc_AOst3lWLsr7JWwMvLnd1fTNeTp86cCKRTCBggtwfUIDbZ8lA646cYBlYMTlyOCbsOsUA47NHDiRvBKIpA04iSNQFiw6MBp4KDQOmxA8qFqOOA_R4PWZx_OwvWzG4UGtMI5Yl_DULXJO1dNgOnR3cGUdr1Q3Ro8A-a6D0ch0cIZpQShoJZcdT6ecy8kwktZek_H0dngdaENGqMNDGgt7_Bb3CCstHo0NRK2J-wJfvpDW8eVE9z5EHULhGZXpkz5JzRbvN96iCPCnlLvCsDg36Mw2EBr9AA9GrxyII6AZCU8KGiww8Sq_cMttoQ9Ub9DCNe_1HqUjc_k3BoOwgnLuWK11HY0CLr6C2vP_2sc7CmMGXgh5X56WX8PRmg2BUho5jvGfzvfM5lvNpotvN-E2H61uWDJyOPf-_v7jE4C9MtuvDp7v_kts-m01Yeu_XLlMpFNmz7o6Y-LFtv2E_5Tv39YRpL9-10eSFbe2ULaH1Fl4xmZeIoo7XBi5bnHG5Kr7l4jWm2g5lLOhbzUaipVOHHyHJrfV46wkiut3gY92iCubAdRSP9d7X9dWmEu6f6Swk-CNz1_l8gthiDB9dyBaOHsVeYoeY1BJa63QC25tV7nXr3OhSg4KK1-XBFaoVebIDtg0DfNpDRBnqo36MQpKBxYMQjJza3wTD5fynJ9oz_Jc-_c0fpOogdCD51uKi3dWpuO0MO_hB5O8Ytlv9XtzN3vw2m-agrW5CznKyziLM43Ubyh6aov2ohv24zVOU0ThlkWJTRP4jZmPKvilKYrUdCIbqKUpnHMIhqtq5jmLM_jtNqk2zzdkk2EAxdyLeVp8NuvhLUjFnmaJWwleYXShrud0lmoqb_mTeHxP6qxs2QTSWGdXTw44SQWZUgw9-ptv7rhvQDPMvZ_IuOviTsWh2vnpuyr0cjiU16F68dqXeuB0IM_4Pz342h0kEt6CPFaQg9TyKeC_hcAAP__NAGLOw">