<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/59216>59216</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
ICE in explicit return type from lambda inside recursive function template
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
rollbear
</td>
</tr>
</table>
<pre>
This code, reduced from test in https://github.com/rollbear/lift, causes an ICE in all versions of clang++ from 7.0 to 15.0 and trunk at 437ccf5af9c2aec915a68a164a95d506fbac2324. Clang 6 compiles it.
```C++
#include <functional>
namespace d {
template <typename g, typename c, typename e>
auto compose(std::true_type, g, c f, e) -> decltype(f(0));
}
template <typename c>
auto compose(c) -> c;
template <typename c, typename... i>
auto compose(c f, i... fs) {
return
[](auto... h)
-> decltype(d::compose(
std::is_invocable<decltype(compose(fs...)), decltype(h)...>{},
std::bool_constant<(
std::is_invocable_v<decltype(compose(fs...), h)> && ...)>{},
f, compose(fs...))) {};
}
auto j(int k) { return [k](auto l) { return l > k;}; }
auto m = compose(j(2), std::plus{});
static_assert(std::is_same<bool, decltype(m(1, 2))>{});
```
https://godbolt.org/z/hcGsz4hsf
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyFVUtvozAQ_jVwGRWBeYUDh5a0q73vPTLGBDcGI2yibX_9jnmFZpUWOSH2vL75xjMpVfWR_2mEBqYq7pACBl6NjFdQD6oFw7UB0UFjTK-d8Nkhb7jOwjRj6THV4mZQUpacDvhTitpYF4yOmmugHfwuXq05lRKufNBCdRpUDUzS7uyQF1xznNTzwSgIYnzTrgIzjN0FqIEoTBmrY1pnjFDOsiCmyYEGSUSzuIr9pC4pIyGJPCisT0gwj7YXEsML4zn-0fGfl-_En1cxB15OSSg6JseKgxMW9dgxgyCpdMLXvXFHW657yjhU4KSLreFtL6mZLM1Hz60SnC0B24592fHNKx0xW4tUaST9oE1lyQ2fMW9-svrWbnLFoLYvPMjgCe2h4kzOGgeUHHwU2BWuCaXHL1k_RsoeoWFbLHZz-52fXY6e54F46HjORVilWtsoG5eA986MQ7fu7OPEL058RDvrxto0NtGdgn3uOVmIvAW9N7DPxrfQJ9FdFaOlxOIUOz83B7XG2AvLiH6nY_FYGaaLeSDxpPg2WqmUPDHsAUM7g-EeoHuI8HT9GWMxs4SkOCTBBYvgB4xTYR7kPJcJTR_csanK72glOgOXRX-ppy3i5VZFkHdiCRbqxbqeAsDme1JvUXzc4bJRyJLnRlEvR70md2sEJNkIdqJa88HsewwZ1XhTkUpbj7uS4kQ7BPaMrH31-r_rbZTsWbgbkaoqlTSeGrCL3z7x07Bf-jNqdD2ruzwPkiSL4yT0M7fKwyoLM-oaYSTPl7HJ__ZSMGFWsizGeV5K2pYVRR0tcHINnI04XK8oXAYYrJ3qjoPMv5neUl7X11M_qHfOkKs3ofXIsUHf4owEidvkUUCDNDvQmpQ-9-sgpXFa07iMAh6xhMaupCWXOp9b1hU58QkJApIGYRgGqReXVVn7dRJn5aHMEuJEPm-pkJ4NbElyh3zCUI5njUIptNE3IRZRnDvOV_94Nxo15OtfjzvhzSew_wCDXPbH">