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

    <tr>
        <th>Summary</th>
        <td>
            [17 regression][C++20] templated friend not working if the concept use contains the enclosing friend
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang:frontend,
            regression
      </td>
    </tr>

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

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

<pre>
    Recently upgraded to Clang 17 which lead to code that previously worked in Clang 16 to suddently stop compiling. I have reduced it to the following snippet:
```cpp
template <class T, class U>
concept Test = true;

class UnwindFrame
{
    template <Test<UnwindFrame> F>
 friend void unwindStack();

    UnwindFrame();
};

template <Test<UnwindFrame> F>
void unwindStack()
{
    auto u = UnwindFrame();
}

int main()
{
 unwindStack<int>();
}
```
https://godbolt.org/z/1vcqeGnG1

When using Clang 17 or newer the `friend` declaration seemingly has no effect causing a compilation failure due to the use of a private constructor:
```
<source>:16:14: error: calling a private constructor of class 'UnwindFrame'
   16 |     auto u = UnwindFrame();
      | ^
<source>:21:5: note: in instantiation of function template specialization 'unwindStack<int>' requested here
   21 | unwindStack<int>();
      |     ^
<source>:10:5: note: implicitly declared private here
   10 |     UnwindFrame();
      | ^
```
This used to work in Clang 16 and is valid C++20 I believe.

While reducing, I noticed the following important properties for this to be reproducible: `unwindStack` HAS to be restricted by a concept and the concept HAS to be templated, with a template parameter being the enclosing class `UnwindFrame` in this case. 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVc1y4joTfRqx6RrKlrCNFywIhPmy_Sa37lrIbbvvCMkjyVDJ09-SDATyc2umKhX_0H101OfoWHpPnUFcseKBFduZHENv3eoVna3zajnb2-Zl9X9UaIJ-gXHonGywgWBho6XpIK_g1JPqQaNMr5VtEEIvAwwOj2RHr1_gZN1PbIDMpauMpX5smgnXBzuAsoeBNJluDk_QyyOCw2ZUsS_E8tAjtFZreyLTgTc0DBiYWLNsy7I1K7PpTw3D9CbgYdAyIDCxUVp6D8-Mb2C6_YuJx6lMWaNwCPCMPgATWwhuRCYezrBTzdRjTmSanZMHPP9YnasAAG6Xi1hMbG4bxCPsrmtC6whNA0dLDYyp6keQ6ifjS8brd4tH8FukdzXV9l39nxD5gsDH3ckxWBjTfP6byw0RMgEOksznoLerig2ZEEl9hXcRd3rsQxh8VJ7vGN91ttlbHebWdYzvXhnf5Uf1C7-b7_ktm797NDD66J2rda0Dgyd0yVuszCZZWJlBg0pLJwNZAx7xQKbTL9BLD8YCti2qAEpOcPJs3am6laRHh9CMeHHt6BFsCxIGR8eojLLGBzeqYN1HA58fxcbb0akoGBPrvIz_FkysAZ1LbaCk1tP6n-DGBSfbMl7dSVZdVc1LYNUGflvfVJlaWPH4KU2eM7EuIjljA8YrGSDjgzSBpvnYFtrRqHR_taofUJHU9DrVMF59bo8KHP4a0QdsoEeHV148T7x-w1Rvm0jXLzaSZx82chg0KYpxNZkDm-vc76jk2RX9z0Z5b4Dnnnx0TkrVGKB38SlNA-ThKDU1sGH8gfEHnsET7FETHnF-b33S5zQl08UQfIrbopit96lKh8G6KBYMzg7oAqGH1sYDQj4S2UecwdkItddpMKzMbsdeZvC_9Y9rrQ-OVJRr_5IOyhS2kX5c-fL81nGxRBNpnij0IN9sMsg4yoAO9hjpRgg0Stt0Ds92L7PbsZdZnFuir6THOcyalWhqUcsZrvKyrkVdlbyc9StRL7KiaOtKcMTlvsxVVS-rQnAhsmK5WMxoxTMu8jyrOC_EopwXctEqVFgta1UuuWSLDA-S9Fzr4yHm0Yy8H3FV5UVdzLTco_bpQ8u5ikIysW6dNSFmDueMbxjnDjuH3pM18VWxnblVRPu2HzvPFpkmH_wbfqCg07c7jyfj2llsWfFwdQUrtm9jvXx6jA3JVUn19k6MGFfKmiDJ-Hcjnppno9OrdyFMoR_3c2UPjO8ivfPl2-DsP6gC47s0C8_4Lo3j3wAAAP__CSCfYA">