<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/55794>55794</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Failing to instantiate some members during an explicit instantiation
</td>
</tr>
<tr>
<th>Labels</th>
<td>
c++,
clang:frontend,
ABI
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
AaronBallman
</td>
</tr>
</table>
<pre>
Consider the following code:
```
template <class RealType>
class TestLib {
public:
TestLib();
void print();
};
template <class RealType>
TestLib<RealType>::TestLib() {}
template class TestLib<double>;
template <class RealType>
void TestLib<RealType>::print() {}
template class TestLib<float>;
```
When compiled with Clang, only `void TestLib<float>::print()` is instantiated, but when compiled with GCC, ICC, and MSVC, `void TestLib<double>::print()` is also instantiated. I believe Clang is incorrect per http://eel.is/c++draft/temp.explicit#10 and should also be instantiating the `double` version of `print()`.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVk02PmzAQhn-NuYyKHMjngUPCNlWk9tKu2rONh-DK2Mg22e6_7wCb3bC7rVrFCp4P3nlmbKRTj0XpbNAKPcQGoXbGuAdtz1A5hSzfM37H-J6t-dMazYhtZ0REYHlZGRECfEVh7h87euPjlDK57zHEz1oC2xwmN3S9NLp6FoZrCsu2LNux_JoHF6cVdF7b-CrENnfP-38Auern5W2I6uf7WemRkaSnGnP1WTOkpBx1Mekc3n3hzzhjW39huun4f4hq40ScAc1P7EeDlo607bRBBQ86NlAaYc8sK8FZ8wiU-QrtRfIVF6WCDqBtiMJGTThqkJF9hIe3ZT6V5RA9TQ9hFXz59n3cvy15M9f3awoT3KxwCieQaDRecGpoIquc91hF6OhaNzF2g152pIVoUh1oU7HsQEt5UVOJ4zDYFH91dDc12fmCj6ihcb1RU1mJN5WHL2T4XojrCZoAL-iDdhZcPfjn9Gmiilzt8p1Ioo4Gi6PQZlSZNQTBtQgttpK0QPV-SBEWrmi3CM4mvTfF0F94bvBMM-9lSmdAhjGX6-ND591PGgmZOoQehxmsVpvdMmmKOlvLbFFxWe_qLd9lslbrxXa9kXy5rcRGJEbQjEPBVjSy7GlytBsPkRzjRcr3tXc2olUvkf3hNBiru0QXGc8yvsoXi5zTL13mnK_XijybJcdqy-i_pZGkA2zq_Dnxxcgt-3OgoNEhhpcg3X59togjE-mLPjbOF3tBDAdhTCtsMvZZjE3-BirbhJA">