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

    <tr>
        <th>Summary</th>
        <td>
            libc++: `make_optional` and `make_any` lack implicit SFINAE constraints
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          frederick-vs-ja
      </td>
    </tr>
</table>

<pre>
    [[structure.specifications]/4](https://eel.is/c++draft/structure.specifications#4) specifies that "_Effects_: Equivalent to:" sometimes propagates "_Constraints:_". `make_optional` and `make_any` are specified with such implicit constraints, but libc++ currently doesn't constraint them.

The template overload of `operator=` of `move_only_function` and the non-member `swap` of `expected<cv void, E>` (currently unimplemented in libc++) also have such implicit SFINAE constraints.

Note that there is a related open LWG issue: [LWG3627](https://cplusplus.github.io/LWG/issue3627).
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyNU01v2zAM_TXyRYjhynEcH3xIm3QYMPSyATsGskTHamXJ04e7_PtRbtOmwzYMkC3xSSTfE6nOynNLqlscPrgoQnSQ-wmE6pXgQVnjSbUn7H69TNshhMmTcocIDgCdK48LQdgtDul4H9D8ayhWrglr6CsKnoaBB0oYOx76HkTwR4xNDz-imrkGE2iwSzJGvR0hqBFdJmcnfuIBl8nxDuMGx5UJidcRoZySTTHyJzjaKaXlGm3KjXzDuTkvkIM3KpI-qzBQH8VA1ThpJVSg4io2u6NdDFSr7lUsFdE55KjPVFrwhrD62gOlwZiTYk-K3cv_2wA0AMZG7tTO4LTlkto-0bITOB6sI-U-MXsBRzx0tEafj300Ikm5CMHY1FizGmHswKWz_plP757wE2UFkKS8EzOdrZKJ_4GUh3QG6_jOPZokF0a08BKUuVKYSsW1t3TgM_x2NV_vPz_sDtc39EHrg0WNS3GRKl6z8pRTB0k6Sp7A0C_fPyHqI6SKY_uhXW5Y_ac2E5OOPn35CWsUu1xZRNEB_0uIxZE1eSbbUjZlw7Oggob2SkpK8n9dobl4-pfOLDrdfiT4SkvYEQ2t58u0wl59xEJceKanUq2rTZMNrai3PYOiZ_1m3XeyrKGCshKskg2veV1nmneg_cvj3GeqZQVjRck2N3VRFWVe3YgKhASQ22YrN1uyLmDkSucpcW7dKXPtwqGLJ4-bWnms0dsm916dDMAlPo9hsK7tHUhwSjytZr965NlCu104_wKXz1z1">