<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/147185>147185</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
ICE with ^^T::template operator(); in concept on Clang P2996 reflection branch
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Painthingy
</td>
</tr>
</table>
<pre>
This ICE seems to be triggered when using ^^T::template operator(); inside a requires expression (i.e., concept constraint).
Other uses like ^^T::operator(); compile fine.
**Reproducer:**
```cpp
template<typename T>
concept has_tmpl_call = requires { ^^T::template operator(); };
constexpr auto test0 = [](auto& p_self, double) -> int { return 42; };
static_assert(has_tmpl_call<decltype(test0)>);
int main() {}
```
**Compile command:**
```bash
clang++ -std=c++26 -freflection -fparameter-reflection -freflection-latest -stdlib=libc++ -O0 <source>
```
**Godbolt link:**
https://godbolt.org/z/TM5Trq77z
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUU0uP2zYQ_jWjC2FDHlmvgw7rV9FDkaDwfUFRI4kNRSrkKOnm1xeUNvvo9tAABAiOPd9rNDIEPViiBvIT5JdELjw633yW2vKo7fCUtK57au6jDuL381UEoikIdqIlwV4PA3nqxPeRrFiCtoOA_Ar59Q7ZA2QPTNNsJJNwM3nJzgNWgDVkJ6Ft0B0JKTx9XbSnIOjv2VMI2lkBWOk97QHPQjmraOZ4B_ZRFmC9h_ThE4_kxRIoCKO_0Hvij3zKTbM2JHptKbbHg_H8SbN33aLIx9a1FH8r0u2oeYb0xQhkZ36aycqJxB2yK6QPPwWOMjzyNJtHJY0RkF1enUF5-t-5QHmB7LQJXD3HWIRc2AmmwOmKvA0LsIp1wELMj4FMH_Pq3NIaAqzFDrKr0JZXek-8eCuO-I4jsGStHmUI5BmweucBsnNHykS_gNVKvmq8bko3iRF_ktpuBiJVBH-T30vO5-cBKDdN0nb_GXYrwxh9G2kHwBPgSewCd5Bd1PbEQux6T70hxfFD2fWz9HIiJr97V3597GLQgVcgo1vILka36if6pxjoObjFK9rm-VH5b65rnWFhtP3yVvbIPIe1cAO8Ddu_9s4PgLcfgLf7H_ndfy3LH0nXZF2d1TKh5lDmhyrNsaySselyLLq-70p5qOsU66ztepViXpbHmrDERDeYYp6WaXHA7JhV-0OXFgeVF8WxarE_lnBMaZLa7I35NkXuRIewUHM4locqT4xsyYR1uRGfY8W4576JDbt2GQIcU6MDh1cI1myoiev-XfP4Cyv9sq3OinNkE5-xrgvxZjStl1aNyeJN86_8NI9Lu1duArxFKc_XbvbuL1IMeFutBcDbs7tvDf4TAAD__4FTdEE">