<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/121381>121381</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang] template class with default non-type parameter is never matched in return type of function with variadic template parameter
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
wangbo15
</td>
</tr>
</table>
<pre>
The following valid program is rejected by Clang:
```c++
template<typename T1, int T2 = 0>
struct tuple {};
template<typename... Args>
tuple<Args...> foo(){
return tuple<Args...>{};
}
int main()
{
foo<int>();
}
```
The code can normally compile if the default template parameter of `tuple` does not exist.
GCC, MSVC, and EDG all accept it.
clang rejects it with:
```c++
<source>:11:3: error: no matching function for call to 'foo'
11 | foo<int>();
| ^~~~~~~~
<source>:5:16: note: candidate template ignored: substitution failure [with Args = <int>]: template argument for non-type template parameter must be an expression
5 | tuple<Args...> foo(){
| ~~~~~ ^
1 error generated.
```
Please see https://godbolt.org/z/6h8vWx47x
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyMVEGPszYQ_TXmMlpk7BDCgQNLNt-pUqWu2rPBA7gyNrJNdreH_vbKOJtI3W31IUtEsef5zXuPEd6rySA2pHwm5TkTW5ita96EmXpblFlv5UfzOiOMVmv7pswEV6GVhNXZyYkFlAeHf-IQUEL_AZ0WZiK8JXRfR5rWQNhzXLQNuKxaBCS8Cx8rGrEgvBaEdaBMgFcGhJ-BEv5CaOuD24YAYVs1AqmeSXUm_DlBf4OT5zm0bvKpeK8ivIv_5HlO-AuM1hJ2IqyOWLQFAHAYNmfg6-H7dRDvq87p1shxEcrcYOJOQorQvFMmxNK0mZimyk8dEkrUc7ASYRAGjHWL0PoDBrusSiOoEcKMIHEUmw7w2SiswokFAzqwI5AjTZyPFKRFD8YGwHflQ57u-NF1UdRffvt9fwsj4eX8A4TWIIYB1wDq8-gQPbu56EEFeFNh_j8PCe-83dyAsVneFgXhLSe8BXTOuvjDWFhEGOaYl3EzQ1DWwGgdDJFAsEBYtbtRJR-KAkjVwX_rCPsTz5Dy5e_0fGVSRjbHRCBGo40KSyWjfHcd1WSsQxl3_db7oMKW6AmlN4dAyucowB6lPY0PQuU5Vt2RhJu2BU3YOzPWPMUkfmfYsvkAPYIwgO-rQ--VNbeuyr2rn0trUmBvPupAaFskzWFCg04ElPnXuP2qUXgEjwhzCKuP1rILYZfJyt7qkFs3EXb5i7DLcT5d_3g_VO-ZbLiseS0ybIqKl0dWVzXL5qYeT0VF-eEk-kqcKoH1cJI1Ox6KSlZVLTPVMMoOBeMFrRgvWH6o2ZGOlLJR0sMoenKguAilc62vS7w7U95v2BSs4Kci06JH7fd5xNgeTcJYHE2uiQVP_TZ5cqBa-eAfEEEFvQ-xNIDK88OGQQvv90zfv6m7Vw-LlAeD1-hVzC1KUOY-HOJJOz6CvGNdhVNCquEbv7PN6eZfUqswb30-2IWwS2R9ez2tzsbvjrDLroIn7HIT4tqwfwIAAP__0Re7Xw">