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

    <tr>
        <th>Summary</th>
        <td>
            [clang] Different behavior between SFINAE and requires 
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          16bit-ykiko
      </td>
    </tr>
</table>

<pre>
    See code below:
```c++
struct Any
{
    template<typename T> requires std::is_copy_constructible_v<T>
    operator T();
};
static_assert(std::is_copy_constructible_v<Any>);
```
Obviously, the type Any can be copy constructible. But clang17 reject the code.
If I modify it to the equivalent form of SFINAE:
```c++
struct Any
{
 template<typename T, typename = std::enable_if_t<std::is_copy_constructible_v<T>>>
    operator T();
};
static_assert(std::is_copy_constructible_v<Any>);
```
then it can work. The test code is at [godbolt](https://godbolt.org/z/zajsjna7b),
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEU01vozAQ_TXDZdSI2CEkBw75aKRedg_tPbJhCG4NZu0hFfvrV4Z0o672UO1lJSMw9rw3896MCsFcOqICsj1kx0QN3DhfLNfa8MP4Zt5col01Fs9EWLqKUJN17yB3kB4h3cE6nVcJYh_X9DewH0rGXTfebuW3A0REpra3ignkgceeOtUSvoB8RE8_BuMpYOAqEsidCefS9eO5dN0MabSl8xXkIQbcIV1PXrHz-AJiA2ILcv9BfPz9HVixKc8qBPIMYvMFlliAfPwE-FHvvP2ur8YNwY4gDsgNYawo1o2l6lBHyfoRPwEvcD8wllZ1l2WOnl6p5Ck0qruYYZ9qfMLWVaYe0TCymy5Eea7KUsdYO9-iq_H59PRt9_jPbvzdiljKxw7k8W4HdSoqY-ozgzx81aV5_X-vuKEuqhmdeXf-bYEv0TAKPDe2CagYIdtfXKWdZciOIDYNcx8itziBON2OFs5fQJx-xke9htdO5Toyi0NSFbLayq1KqFjmqVzL5SrPk6aotipVapmqXNcr2mx0Tukm1STqeq1pvUlMIVIhl0KshcjyLF9oKrf5qkqrqlppQQSrlFpl7MLaaxszSEwIAxX5erXMEqs02TBNsRBTd4EQcaB9Ee8_6OESYJVaEzjcEdiwnUZ_jsiOeDR1TT72mKZGXY3zqInfibpbs6HqqvuoJoO3xR8aGW4GvShdC-IUmW6vh9672OwgTlPiAcRpyv1XAAAA___L3GW-">