<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/130992>130992</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang] 20.1.0 fails to compile variadic partial template specialization
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
juchem
</td>
</tr>
</table>
<pre>
The following minimum repro used to compile successfully and work correctly with Clang 19.1.4, but fails to compile with Clang 20.1.0:
```
#include <iostream>
#include <utility>
template <typename> struct s;
template <typename T> constexpr std::size_t size = s<T>::value;
// list
template <template <typename...> typename L, typename... U>
struct s<L<U...>> { static constexpr std::size_t value = sizeof...(U); };
// sequence
template <typename T, template <typename, T...> typename L, T... U>
struct s<L<T, U...>> { static constexpr std::size_t value = sizeof...(U); };
#define TEST(N) \
std::cout << "[" #N "]: " << size<std::make_index_sequence<N>> << std::endl;
int main() {
TEST(0); TEST(1); TEST(2);
TEST(3); TEST(4); TEST(5);
}
```
Compiler output in Clang 20.1.0:
```
$ clang++ -Wall -std=c++23 sz.cpp -o sz
../sz.cpp:5:52: error: implicit instantiation of undefined template 's<std::integer_sequence<unsigned long>>'
5 | template <typename T> constexpr std::size_t size = s<T>::value;
| ^
../sz.cpp:17:3: note: in instantiation of variable template specialization 'size<std::integer_sequence<unsigned long>>' requested here
17 | TEST(0);
| ^
../sz.cpp:14:32: note: expanded from macro 'TEST'
14 | std::cout << "[" #N "]: " << size<std::make_index_sequence<N>> << std::endl;
| ^
../sz.cpp:4:28: note: template is declared here
4 | template <typename> struct s;
| ^
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzEVk2PozgT_jWVS6kR2BCSA4eEdE6jubxpvceWYyqJZ4zN2qa_fv3KwKST7s7sSqvVom4R4_p4nnqqDMJ7dTREFRRrKDYz0YeTddWPXp6one1t81rtToQHq7V9VuaIrTKq7Vt01DmLvacGg0Vp205pQt9LSd4feq1fUZgGn637idI6RzLoV3xW4YS1FuaI2TLJkhxYjfs-4EEo7S8jXViyNMmSFPgK0hXM0-kvXQHjykjdN4TAa2V9cCRa4Pef9vqgtAqv01a6CtR2WoRhL7x2ZERLwO_RB9fLgB74-oYV7qKdtMYHeukc-tBEYHzl1Rs9Bow3BL6JMepoO-4-Cd3TGBXYFtgWtfLhY44v8iVJEhOe03-LBbvYxIeR1Dvy-hvw-mH0i65QrtEHEZT8DewB34hbvZE9RHe2eAC2BL5GKDdX2D390ZORdLtGEeRXNWY17r6ktLvNZYj2bxEaOqWhgzKEu_v_7YAtvgNbIhQ1pCt8jyttHyIV4DUCY3FcGENg_Pu43ABf4fBotIlpgddn_1b8pEdlGnp5PJeP199_cZqcflmTafQZoTIBW6EMsMUArVwP0Ca46cRpWmbXSzYuLx34tUV-vSzODrFIHwYuXdXjeDq0fej6gMr85ZDmKKMFsDWwNd79X2iNdwPTjRwfMo7-LZFdh3cW_Rukq6jWdnwGfFXEfxYLTM5ZF3-ottNKqgjAB2GCEkFZg_aAvRnlbC46kJX-UgtlAh3JXQrRm-EcbFBbcxxFAVYOZUMsEMqvG_qfHwc4XDE-FPefmGcl8BWPhI0NNBA3nyk_CafEXtM7RN-RVEKrt9EmFuBDP_7tGqCLFj5QgydyNELOygHyxya84oNfM8ojI3ZJiV46YRpq8OBsi62QzkbEY-hJgyyfYv7nA_l7wSI7trhkd9ZEeWxIauGuKon5zeb6_Ea6LO7Na4R1nsFZU_FmyZdiRlVW5lm5XGZ8MTtVJc2pKemwTFkzl7TYl4Jn-XwhG55TkxUzVbGUFSnPWFamBV8k2b7I8oJLNs_YfM8l5Cm1QulE66c2se44U973VGU8XS7ZTIs9aV-NykxnQBRm5qrocLfvjx7yNL4J_XuIoIIePkeGcwWKzXS0fP5EGNq-URI74YIS-lb7z3qnq1MInY9aDq-wowqnfp9I2wLbxtTT7a5z9gfJAGw7UPHAthObp4r9GQAA___V4LH6">