<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJytVV1v2zgQ_DXyC1FBH_6IHvzgOM0hwOV6hxQN-mRQ5EpiQnFlkrLr_Ppb0vbFaXtFizvAsZCVtDuzM0PXKA_LlWNSOTE6B5IpwzrvB5eUq6S4pY-FnYK9S7Xe9Snalko3eT6bZwuWFFeWmxZSLgQ4x9Z_fnBJUTFu5E81yWf5NDQR_ZBy3Z7fT4o12wMTo7VgvD6wju-AcSZwHDQQ1qaBcIft-cExbJhEZc5vL-gx47zlyhCbZJ7hAJZ7tDQn9J5noX1A6Ds4MG6ps9as5jJNspskW52-i9VXFFqUNWp_Qv9Cf6V8_DyF-t6x5H2RXGVJNWVrTQuhe1rVIimu6cN2jv22Xh9rzsuL8r0SFh02PkAiZHGZcWK5qqFVhmop-9gBa5R1nvk9RsAeke3A1uggKa_Z_cOnNVMulj1YB-nPc3iZP35pPj_al_-LA909EiAN0LQbtBJs5EENzigvwF8MCaJELmeOv0omb7ZbKKvt04_JkBMGCy44SPJDMCzxIIibTYt0Yc4fyGZUGywOGEJhYH-sfkco6Ad_iAR_h8Z_h2GvpKR-lwKFslVtFx9_GklaXuPoj7Uw4-7-wxs7PmCsnhGRdzm945nDHthA9vchMRb2VvmjoSkWONoYipgI5fwxTBRw39HYyCdlKx-CEPAemAbu_Cl9rsNRS2rZcEHp-ZG0UTjlHWusAiPDFXuWzK5PuU5mNwT0iJlmKUsR5q1B55VwUWyDPj5xqXf8_hiQ7jvUgXIIeR-3tuHa4YbxYSBCHplRUGtUNNqNomPcvYF7qRaXO24ERL3u_Kld6PZtMyq3SPvsekcufYZ_7QnbkeuwBzIW154W13ak1SYgft4Q8KDYXpEoJIEMI2rar-rDYQYmPh13Q1vfo6EjzJPhyHXcHJgbQCge3hSdUduRHFh9uyHl3Bgd1h9IsV4ZEibM0YjPJLjHKHk6kctSVmXFJ3wkVHb51zh-GfTo0MBktHr5VcCI-1inAvuQHzq5T5d35MInEOSU2ziYTt3bWTmdzSfdUi6mU57l80Wdi6a6moumFtVCznNRcyib-UTzGrRbkjuSogDTBTV6cib9F8NVFK9Jfa2dCkUWSrObyX-HqpZFVhRZXiyKMqvyPG3ygpdlMWuqUopZXiXTDHqu9D-_WRO7jC3rsXV0U1OiXn_QJtw51ZJsJ2YXmz1B9srrePeCHwXjrieIO3gTiQZjcNnD7d0fq_esIRQjHViTSGEZ8f8NEz19CQ>53456</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [libc++] Improve diagnostics for CPO SFINAE failures
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            enhancement,
            libc++,
            c++20
      </td>
    </tr>

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

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

<pre>
    As discussed in https://reviews.llvm.org/D115607 (range.access CPOs) and https://reviews.llvm.org/D111514 (cmp.alg CPOs), we currently have a couple different ways of doing CPOs' constrained `operator()`, and they are all bad.

* https://godbolt.org/z/3dWY4ebMs — Clang/libc++ vs GCC/libstdc++ vs Microsoft, `ranges::begin`. The first two are too verbose; MSVC is too terse.
* https://godbolt.org/z/z6WxfYWrz — Clang/libc++ vs GCC/libstdc++ vs Microsoft, `std::strong_order`. GCC is too verbose; libc++ and MSVC are too terse.
* https://godbolt.org/z/1fqqe39qj — Clang/libc++ (present day) vs `__go` style vs proposed new style, `ranges::empty`. Left is too verbose; middle is too terse; right is just about right, IMO.

So, I propose that at some point we rewrite all of our CPOs consistently in this style. At the very least, we should refactor `std::strong_order` and its friends from [cmp.alg] so that their diagnostics are not so terse.

This whole thing might _also_ apply to niebloids such as `std::ranges::advance`. It might also apply to niebloid algorithms like `std::ranges::equal` (although I _think_ those will tend to be simple enough that we won't need any special technique).

This issue is my reminder to look into this.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytVV1v2zgQ_DXyC3GCRPkjevCD4zSHAJfrHVI06JNBiSuJCcVVSMqu8utvSdut0_aKHnCAYyFLaXdmZ0auUE7rjWNSuXp0DiRThnXeDy4pNgm_pY-FvYKDS7Xe9ynalko3eb5YZiuW8CsrTAupqGtwjm3_eu8SXjJh5C81yRf5PDSp-yEVuj0_n_AtOwCrR2vBeD2xTuyBCVbjOGggrE0D4YQdxOQYNkyiMuenV3Sbcd4KZYhNssxwACs8WpoTei-z0D4g9B1MTFjqrDWrhEyT7CbJNqdvvvmGQouyQu1P6F_pr5CPn-ZQ3TuWvOPJVZaUc7bVtBA606qqE35NH7Z37Pft9lhzXl6U71Vt0WHjAyRCFpcZJxabClplqJayDx2wRlnnmT9gBOwR2R5shQ6S4prdP3zcMuVi2YN1kP46h9fl4-fm06N9_b840OmRAGmApt2hlWAjD2pwRnkB_mJIECVyOXP8r2Ty5uUFivLl6edkyAmDBRccJMUUDEs8COJu1yJdmPMT2Yxqg8UBQygMHI7VHwgF_eCnSPAPaPwPGPZKSup3KVAoW9V28fankaQVFY7-WAsz7u7fv7HjA8bqGRF5V9AznjnsgQ1kfx8SY-FglT8ammKBo42hiIlQzh_DRAH3HY2NfFK28SEIAe_ENAjnT-lzHY5aUstG1JSen0kbhVPescYqMDJcsWfJ4vqU62RxQ0CPmGmWshRh0Rp0XtUuim3Qxzsu9Y7fHwLSQ4c6UA4h7-PWdkI73DExDETIIzMKKo2KRrux7phwb-BeqiXkXpgaol53_tQudPu-GZVbpH12vSOXPsO_9oSXUeiwBzKW0J4W13ak1S4gft4R8KDYQZEoJIEMIyrar-rDywxMvDvuhrZ-QEOvME-GI9cJMzE3QK1EeLLujHoZyYHl9xtSzo3RYf1EivXKkDBhjkZ8JsE9RsnTmVwXsixKMfPKa1iTRF9jEVS668lge3ijT4PRRezh9u7PzTvWCKVHSs9stHr9TSBpV2OV1tiHvNGb_nT5jZo-QU3Ouo1A6S19uyjmi-WsW4MU1Txb8VWzzK9WZbbMQK7mlWzKK5hDtpxpUYF2AWrCOZguqNeTk-m_GEbOLyh8qZ0KPAulxc1MrXnGeZbzFS-yMs_TJueiKPiiKQtZL_IymWfQE7Uvv1Azu47Yq7F1dKgpP19_vmbCOdWSSCdcf4_j50GPDg2cBoqRZLfri4NZ5L6OxP8BjUJnCw">