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

    <tr>
        <th>Summary</th>
        <td>
            Out-of-line Definition of Partially Constrained Members 
        </td>
    </tr>

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

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

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

<pre>
    Clang rejects defining member functions of partially specialized classes with constraints.

Reduced example on [godbolt](https://godbolt.org/#z:OYLghAFBqd5TKALEBjA9gEwKYFFMCWALugE4A0BIEAZgQDbYB2AhgLbYgDkAjF%2BTXRMiAZVQtGIHgBYBQogFUAztgAKAD24AGfgCsp5eiyahUAUgBMAIUtXyKxqiIEh1ZpgDC6egFc2TA3cAGQImbAA5PwAjbFIQCx5yAAd0JWIXJi9ffwMUtOchELDIthi4hPtsRwKmESIWUiIsvwDEh2wnDLqGoiKI6Nj4tvrG5pzhnr6SsqGASnt0H1JUTi5LAGZQ1F8cAGozdY8MJhWkoiUD3DMtAEFrm6JsNiSjR/3D7ZYlJV2AFUv7koiKQfE5diJ9gB2Gy3XZw3YAN3QBEwuxoEFmUJskIAIvczLiDjC7rdHs9Xth3h4gZgQCBQo9gKQJH8AbcgSCwSIDh5/usrrcCcT4Yjkaj0bMifjCetifcyS8WG8eTS6QzsEyWXyBTckSjwTztXSJViCXjBbcGbs2CxQhjpXLBYTblx5vRuABWfgBLg6cjobgeWy2XZKRbLSkbPjkIjaV3zJDYFg4OIY8gAaxAHp4ADp1tIAGwADi0PHzxdL6wLhm40n4bCzWnIPr9Aa4/CUICbsd9rvIcFgKGw6g6PhIFCoEAawCUqmMVRESHQAHcfdGMM8GEqMnOwvRFyuW/wN0kGIMZ6wkkol0RyCez6QAPJjg%2BruPkYcdG6kGfcfif1A6kIH1%2BEEYQxAkTgZDkYRlDUTRe3IfR1kMYxTGDaxDAIKJO0geZ0DODJOy4ABaGkDhxcxrFsCw/TDJYVgMGlQl3BclzfXh%2BGBbBVmjZdmSSbg%2BDdT1vXfNtcBHVAxzIXZ1CLAsSILaRdmAVBUF2CBgR8Jh00xCAg2ozDdnwYhZKjWYuLjWYEyTFNqBErg63IBsPSbI9/T/ewuxjaz5kzbM80LEsy2Cytq3dLh1jExC2ys3t5gHBB4AgIcpJkidqGnWd533di12PdBN1eHdctfDz70YOJPhMGQtCbSrYmfUR8vfADv1/dsPykoDQi8sDRHESRoIGuCNHffREiMEw0Awux6Gw3C0wImpiLIohMAoqibGsWiO3DRjhmA1i8sPISuNIHjzvIfiWEEzjHK9ZtxO4STR3HOSFKUlSauAXYZBzLRAc0wydrsEzCA%2Biz4p0GzyETZNBjTSLnIbdZIRzIt1mxyESyLaQeAsAsPQU57Yq8ztu2s/tEFSkAAIyygsp/HK93K67Ku3IQTvZxDGriBFUCSJIAH0ER4ABOEWKSBEX5Orfnmt5v12pZryAN6kCYMGyCpFkUaVHGxD9AsVCZu22wsJw%2BB8MIoRiIAelVC3drog6oPsDaWLK1rOJjS7eP4W77uEmsuCejyJPSj75etJRBcRSWcxlogQbm8gIbM0h9gsdYeEs3yEtsxHU0c1GQALCwcx4Ata4SCWeBJyF81NyOKZ8ntYf8kBpCLHNibziWFI9QeFIi7horJ1svM7%2BMw4sGLp662e4YRWI0lcaQgA):
```cpp
#include <concepts>

template <class T>
struct S {
    void f() {}
};

template <std::integral T>
struct S<T>
{
    void f();
};

template <std::integral T> // error: type constraint differs in template redeclaration
void S<T>::f() {}

int main()
{

}
```

Yes, this is a duplicate of #47364 (but it hasn't received any attention so far).
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJydVsmSo7gW_ZrMDVEZzLYXuRCjwWAb8IR3DAIEGEgkjOHrW3ZWV1W_6N48BxZCV9xzdIXinLhNp0-1jpqc6WEJE4KZFGaoQXTgBm8x7JlsaBKC2gYzbcZ0UU9QVNcTgzuY0B6aYcokdYQxxMyISMEkdCrpI9QQ_PHGam8s-G59mA4JnQwf0a2rIdM2zJuk5G0atzV5k7Q3flkQ0uE3AbzxBr1-hj7aPn8NCDMN7UInL4ChfKXSYQMcXSnBKtfHTWgYrnoGzpDrImAVSwfX3NPiUOFBkTtxmGsVKGkSiVcOF99F4HryiGmtcyVUvDY3jmAmOdgAjReBmeUq7iSIpqg4gmOuuMA6ksu0eXwhSy-4a5drqgxzI-EPQEiA6Vm3GABpP4IyNixPfUgTAClrn62LjVZZNrpHsksK3dEsUiCx2BPsj5ubHljnI7LwfdT0gh8bzfkyW7Sx5G0pkntvSt1cNL0c4C8TBA1h15x9PCDJAebV44wlBW7nNFy6dnGuWnTUBM0lQDf6m2zjLQpKn5ZN0BbXsLZPPDCO9wWdtvEyXUqRvcoV3pyEy3UUQrAVPEUfh0erG7ejjSsLWPdkdpBWqos-XePVhRRCIea0piot1yrfePZ6CeIkD9QxsLRColAD7vtETQ5iWFZRycYuykoVEpQlU7A8m0t4CGRvxvp0vkzKIamCcjzM5BLYJ6ReSiVOzBjz6sMryu7iKOEhrh_S3R-Acs5yxcnlpGzjHJ4n_nLd-LETVPG-rKwyOgmzrYVGLu6scJmD6AHWnQi0jiMWMEegIXa_nh-pI49OcRPZRozV-dxY-34FIpHyVo-WGuN01d-txMg35ijn8r6wDLXVQTSqx6-be_L1YO2BdZKlpusuTf3LbXbj3Tem4UwzjFu2Mi33Ko9V1dasP6lwlj2wt8v89cX1w74Kk9SUKzNLMpRxQK6sNfeK6XroPUB1yK9aFfq1djz4ULAyn6vc8HEwteihAWtj79gcXlltp9m7SQRKZFZa8UgevYHVkTI4aHZ4yl2z9mpBSeo5uxSv7KYSK6dbeU1vQRB_k9HSA3e_ZFuSKOsTeMzW5cqpDsCB5UR-egMn5WjwqpL7S7tg2YcKcr6dtbQZw-K6Kc_h4NBGnw7G9kvR-1wWLAXvg9haPWnQP6TfURnNUjXH7pJ1dDzx6kS-hNQpuFJ_qPyEBSLla0URQW4lnV2h9MtszqkkCCni-H2qbDm4ThOSafOCDXf2vnBNj6hx0Ie37Ogv7xnQ7rR6Ror3U9VqHlpizV_rgd9a5qBu11nm68jVRxZQLrI5Cio7WrcOOVZbuKD9QrGJz2gnaH5Z3ABHX99bwbC11uV8tzJ01vW5XG9WV_LYicHBF9a7wNgc6yAawCW8KrPjg4Qdp7TH-qyCV1XRLHasOU_64bpVykPgNFacXi1_tgh3e0x6MDmRBwEGeO8dpUX4tZzJwGO6CKIbQQWANU057ugzBRY28mIzCJZ3uF8fmtkjxTiqgW2BNav7dPd3-nkTKPpF2vVZcyPSneO7az-BrVypoWtOamdUx-i0Nh_aCuCTeh14fsT2-GKqLF2r9ZEFYH1ShbRvc7ndYy06Oxuu39llsIB78bxYDPoNDyosJ3sflAsJEttXEj84J4-6zb34tsyt2GWLVY7TEOpYmHSCH-sjm3CmBxx1TB4iIJEYqGeo2JOx5LbTbnNdNiTMlpXSqc56i-IZnQ1r5UHDQoui7W0O393Fi6Y7ith0OlnmoRj6Z4utk8jLabFXT4H41hWZ_b6Srvs5wguoSeohhcyboFIlSmBHqKLofwoRgVR_IvI95alczOHXDKpcQ0KYgHlbKN8jDP3dW5QyGRUoiv6KLLSfCWlHUP4rOSbpk6sAqBbCvI_qfwGi034P_ifob5D_A5D5llMG9n3b0yBDpg7-IdNMirIM9phBDfMrWw9TSIvTR0_p_0Z6EfpF-IXzrzV5tc-8N5r9J_9_Lu_3Wv65j39GQ0gPh8pQvaTEMBMx6dDVKHlyoz6EbrS4EGSRdpbxQBhEmCLCFG1BKPUEojt1GlEzMREhsHmugcEtk0U9JfPxDj85WZYkmWdX0nv6KaQrYRW9E0Rq-LkbyI82-1GjBjLaywq93qaY-1_eR_27dhTEfbkkzLwPff35PwaG2qEh_kjaG32o6_vftx9d3z69Fn1EGA_PhRrSUuDY9-JTigWZlZM4FSOWy7gFFDhRZFeLiONYfiVL73UUwxp_Uuv0xvMNHJlXCtqnFuodffIsz3Msx7NLdslJH1EscqsYZktBFGM5Ed5EFtJtqT-ePJ7O6r3_fFGKhxzTYI0wtW2_gvRwoLyB8AVH80cDoaf080Z3oYI1vMHm_QX_-aL_F3J6RpA">