<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/131511>131511</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            error: implicit instantiation of undefined template
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          oltolm
      </td>
    </tr>
</table>

<pre>
    This is a regression in Clang 20. It didn't happen in Clang 19 and it does not happen with other compilers.

```c++
#include <utility>

namespace mcl::mp {

template <class... E> struct list {};

} // namespace mcl::mp

#include <type_traits>

namespace mcl::mp {

namespace detail {

template <class VL> struct lift_sequence_impl;

template <class T, template <class, T...> class VLT, T... values>
struct lift_sequence_impl<VLT<T, values...>> {
 using type = list<std::integral_constant<T, values>...>;
};

} // namespace detail

template <class VL>
using lift_sequence = typename detail::lift_sequence_impl<VL>::type;

} // namespace mcl::mp

int wmain(int argc, wchar_t** argv)
{
    using fbits_list = mcl::mp::lift_sequence<std::make_index_sequence<1>>;
    return 0;
}
```

```
<source>:25:1: error: implicit instantiation of undefined template 'mcl::mp::detail::lift_sequence_impl<std::integer_sequence<unsigned long, 0>>'
   25 | using lift_sequence = typename detail::lift_sequence_impl<VL>::type;
      | ^
<source>:31:33: note: in instantiation of template type alias 'lift_sequence' requested here
   31 | using fbits_list = mcl::mp::lift_sequence<std::make_index_sequence<1>>;
 |                                 ^
<source>:15:28: note: template is declared here
   15 | template <class VL> struct lift_sequence_impl;
 |                            ^
1 error generated.
Compiler returned: 1
```

https://godbolt.org/z/hGfMf8MzP
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy0Vk1v4zYQ_TX0ZbCCREZRdNDB8UdRoAv0EPRq0OJIYkuRKjlKmv31BUUnsdfbpLvAGgJMkJw3770ZUpIh6N4iNqy8Z-V2JWcanG-cIWfG1dGp5-Zh0AF0AAkee48haGdBW9gYaXvgeQa_EiitLOMVwSCnCc_WixqkVaAJlMMA1r1uedI0gKMBPbRunLRBHzKWr-Nzm6enZfw-PvmacaFta2aFwMRmJm00PTOxSwFWjhgm2SKMrWFizcR6nIBV92mZcJyMpCW0NTKELMtgx8QOAvm5JTA60LK92jJxCmLVFhjfM76Hb8Kfdl3woucJD-SlpvB_ub0tKySpzTus4Y_fLjh3dAj494y2xYMeJ_NK_TrygfENXE3HyYcsyyLqS4aHl0l4lGbGk453cm5ijNgscSkkIUbQpAXmoG0P0RxgYru4zcQmkEp2aEvYe2kOrbOBpKVLOCZ2L4j3qS7v1yj5-K6HLF8nTheCFnKRZcR6gVkY_ofuhVNcj0Hf2TjaEjyNUlvG7-JY-r6Nmp_aQfoDMb5mfB1nHxmvF9TFSoCTm91RUzikxhXbC_xryuduj_IvPGir8J_z5SJVLImIWTzS7C3kb6afncuvjmkci01ws49Y0RNeMrEumFgDeu98HETXdKsJdCqylhRvEtfBbBV22qI661BeXSn6sCCXDYX-XN9sl4tOgXG2jz7nJ8G8SoJ5CazawE9qC1h-MQErd9d2iWiVENEm6wgXu-y1Ua_2LEdJGi1DdOqy1LwCH8eBUMGAHlN6UZzp-6nNE9N89PumC0VsGn537sKrYh1AYWukvxBVpKL94E35EdNEskgtDD1a9JJQxZfU5vTGOh0TjPZAcX1EBqIpROuW-6B36ugMZc73jO-_ML4ffuk-d3efv_y-Uo1QtajlCpuiuuEF53VVr4amrlTVHrvbqq2rvKyKuw7vsKtbWYq6K0qx0g3PeZmL4rYocl7WmaqPN9iVVXu8yStZc3aT4yi1yYx5HGPulQ5hxqYQRVkUKyOPaMLyAcC5xSdYVhnn8XvANzHo03HuA7vJY8OENxjSZLD5oQO-mr1pvjJH0zAfs9aNjO9jjtPfp8m7P7ElxvcLs8D4_kT9seH_BgAA___Tha_a">