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

    <tr>
        <th>Summary</th>
        <td>
            Argument-dependent lookup fails to find function overload
        </td>
    </tr>

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

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

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

<pre>
    This program
```
struct A{};

constexpr bool p(auto) { return false; }
constexpr bool f(auto v) { return p(v); }
constexpr bool g() { return f(A()); }
constexpr bool p(A) { return true; }

static_assert( f(A{}) );
```
is accepted by GCC and MSVC, but rejected in Clang, unfortunately. Online demo: https://godbolt.org/z/cPhbG67YW

It looks like `p(A)` must be found at the point of instantiation using argument-dependent lookup. Related discussion: https://stackoverflow.com/q/77923182/7325599
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyEk09v1DAQxT_N5DLqynGSTXLIYXerVBwQCBCIE3KSSdbUawd73FI-PUp2K2gpIEX54_F78_yLrULQkyVqoNhDcZ2oyEfnm5YGn3RueGg-HHXA2bvJqxOIaxA72IrLtX4G9rFn3EG5h_Iasv1l1nrvnQ1M32ePnXMGZ5CViuxA1gjlHj1x9BZHZQJBtsfF4CXdeNHh3TPlYriM_Us8gayeNwRZ7c7D_xHP55lP1Ozj07SPIBTr_osKgTyDrC5dzlgWh7XTiwx1QNX3NDMN2D3gzeGAyg74-v3HA8gDdpHR01fql7q2eDDKTksh2tF5jlYxmYcNvrFGW8KBTg6yHR6Z5wDZDmQLsp3c0DnDG-cnkO0PkG3_9tjdbMvPn35fxStG49xtQKNvCWErHgnAVuApBsaOcHTRDqgY-Ug4O20Z3YjaBlaWtWLtLMag7YTKT_FElq8GmskOZM_2cd7gOzJqWdCgQx9D0M7-GTqw6m_dHfnRuPtN704g228g27KsZZZWcnnNZFHUdTI02VBntUqoSUuxrbYyL8rk2BRpTUWWK5FSmleU111aFqmktBdpnlVZohspZC6kkKKSZVZuSqqyUhaiTolUMWaQCzopbTbG3J0WfokOIVJTiVzkiVEdmbCeHykt3eNaBCmX4-SbRXPVxSlALowOHH65sGZDze5vhHBU2gRkh6O2A47R9ivYBYdxakiiN82zf6z5GLsLp6XP5XE1e7dsH5Dtmi6AbNf0PwMAAP__RhA7GQ">