<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/85385>85385</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
CTAD: clang crashes on an invalid case
</td>
</tr>
<tr>
<th>Labels</th>
<td>
c++20,
clang:frontend
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
hokein
</td>
</tr>
</table>
<pre>
The following code crashes clang (and gcc as well), https://godbolt.org/z/x8E95sfTo
```
template <template <typename> typename Iterator>
struct K {};
template <typename C, typename IteratorPolicy>
class Foo {};
template <typename C, template<typename> typename TTP>
using Bar = Foo<C, K<TTP>>;
void s() {
Bar(1);
}
```
The crash doesn't exist in clang18, I think it is introduced by the recent change of CTAD for alias templates.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUk09vszgQxj_NcBm9EYyhgQOH_ClS1UsP-QLGHsBbx46waZv99CvTNLvd7R5eyTLGxr-ZZ4ZHhmBGx9xCtYfqmMklTn5uJ__KxmW919f2NDEO3lr_btyIymtGNcswcUBlpRsRqJZO46gUyoDvbC1QA3TAKcZLALED6oC60eve27jx8wjU_QnUfdSPTRWGk4f8CPnuNj_kt7G-Rj5frIyMIA7f1tcLO3lmEI_4tcanyLOMfgbx-Hk7xHlREZ8RtnvYHkHs_xnqJx4eUub_Ib54a9T1zlVWhoCd978Nvp38n4LT6eUeZAmp4Hs5I4hjCgbisEKeQRxuH6bxLfSbNxoDUA3UrMmtu4iJA1QXqTX3G9vjjzX_nFPf10aj9hwc0DYif5gQ0bjPzhd1yuYJ42TcK5qIJqBxcfZ6Uayxv2KcGGdW7CKqSbqR0Q94OO2OOPgZpTUy3EsSNpluhW5EIzNui22RV3lZF5RNrSjqqiRi1k1RFtQ8DENd92VZVH2pm3LITEs5lbkoqoIKIWij622t6rKoqBxkWW6hzPksjd1Y-3ZOv2BmQli4rStRV5mVPduweoBIAe2B9pQDEdAh7SSxIHbD7F1kp9NBdczmNsF-9csYoMytCTH8jY8mWm6TVBC7m1G-bOMdSofGvUlrNCoZOFtm2_7LLiZOS79R_gzUJezt8esy-z9YRaBulRCAulXFXwEAAP__NMUmQw">