<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/83678>83678</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Clang rejects constexpr variable initialiation from constepxr function template parameter
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ranaanoop
</td>
</tr>
</table>
<pre>
The following program is rejected by clang but accepted by gcc and msvc. [Demo](https://godbolt.org/z/95Pfrqrex)
```
template <typename T>
constexpr auto func(T c) {
constexpr auto k = c();
return k;
};
int main() {
constexpr int i = 0;
constexpr auto lambda = []()constexpr { constexpr int j = i; return j; }; //compiles
constexpr auto lambda2 = [i]()constexpr { constexpr int j = i; return j; };//compiles
constexpr auto a = func(lambda); //clang and others compiles this
constexpr auto b = func(lambda2); //clang doesn't compile this
}
```
Clang says:
```
<source>:3:20: error: constexpr variable 'k' must be initialized by a constant expression
3 | constexpr auto k = c();
| ^ ~~~
<source>:18:24: note: in instantiation of function template specialization 'func<(lambda at <source>:13:30)>' requested here
18 | constexpr auto b = func(lambda2); //clang doesn't compile this
| ^
<source>:13:65: note: function parameter 'c' with unknown value cannot be used in a constant expression
13 | constexpr auto lambda2 = [i]()constexpr { constexpr int j = i; return j; };//compiles
| ^
<source>:3:24: note: in call to 'c.operator()()'
3 | constexpr auto k = c();
| ^~~
<source>:2:23: note: declared here
2 | constexpr auto func(T c) {
| ^
1 error generated.
Compiler returned: 1
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8VsuS46gS_Rq8yWiHBJYlLbTwo7y-i_oBhNI2VQjUgOrRi_r2G4D8aI_dPRM9MYoqCdtJnjyZJ1Nw5-RBIzakWJNiO-OjPxrbWK4518YMs9Z0n83zEWFvlDLvUh9gsOZgeQ_SgcUXFB47aD9BKK4P0I4euBA4TN8ehACuO-jdm5gDKdZb7A0ptoRWR-8HR9iK0B2hu4PpWqP83NgDobsfhO7q4n97-93iB6E1ybYkW033ZTb9xY8e-0Fxj0DYxn8OqHmP8EzYU_pZGO08fgwW-OgN7EctCK2eQRBaAynXyQoA4MbyFQjbBrMq4LM1TJYW_Wg1vBI27SXl9rK-ukvtoedSJw8_Y91DDfYygmZnf49sY4SK923H445UvoR0sSLl-sb_S7SWgc7E4yVSixQAUimE6Qep0P0GmJ6Q5Z9DPwB-GEFiPRUzhXOqUvIUxRiEZ_wRrYOTa_BH6a6r9MsMt3-FoXdwOoNOE1r6E8wVysU_KbdwV8Gb6MTxz9gNj5VO2MaZ0QoM4mYrRtiKZoStAK01Niwu4b9xK3mrEAgtXwktoR-dhxZBauklV_JH6k-e9nDtIexD56TRl8gZkHID_6A74nXac3OR4gkAvr6-7tLJq8BnEWho4zE8pQaZgpPcS6PB7GMx4vrc925AERklG0LLWDC2OdcMuIdbtJA9lsXgn0J-LH4f0YWpdUSLZzZ59SgD_5I2UrZI8XQ_KSHMZXGdlHMCBm55jx5toCwCh3fpjzDqV23eNbxxNSIIrrWJhR8ddiGjv654_rDi_1nT_yYl7J5MBFcKvImZmJsBLffGTuKc7uUfqPqBoCdRPxA0Df_sOtAOheL2Z4nR6Pzvv6UedleKJRnmaSTAAXVIBXbzadKkXNupGNiFqPKbYTPrGtbVrOYzbPIyq1nNClbOjk22F2VR8rqsll23z1ledW29L1lblhwLrGeyoRldZCyjecFovpxXRb4QWcEW2LKMIieLDHsu1Vyptz686mfSuRGbii3LaqZ4i8rFowilsXsIpeFUYptg_60dD44sMiWddxcPXnqFTZqh6Tzi7s3B09xLQ2JvTT9ZDR_2zlC5NNdstKq5OatIfxzbuTA9obsQyPT4NlgTAiB0F3k5QneR2v8DAAD__9mZwkE">