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

    <tr>
        <th>Summary</th>
        <td>
            Clang doesn't recognise friendship in default parameters
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            c++,
            clang:frontend
      </td>
    </tr>

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

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

<pre>
    This code doesn't compile on Compiler Explorer. Moving the defaulted parameter to the constructor body seems to be okay.

```cpp
template<class T>
class single;

template<class T, class U>
class check_constructible {
    check_constructible() = default;

 static_assert(is_constructible_v<T, U>);

    template<class X>
 friend class single;
};

template<class T>
struct single {
 template<class U>
    single(U u, check_constructible<T, U> = {})
    : x(u)
    {}

    T x;
};

int main() {
    single<int> x(0);
}
```

Diagnostic:
```
<source>:25:45: error: calling a private constructor of class 'check_constructible<int, int>'
   25 | single(U u, check_constructible<T, U> = {})
      | ^
<source>:14:5: note: implicitly declared private here
   14 |     check_constructible() = default;
      | ^
```

Compiler info:
```
clang version 19.0.0git (https://github.com/llvm/llvm-project.git 5b058709536dd883980722ee000bb7b8c7b2cd8b)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /opt/compiler-explorer/clang-trunk-20240301/bin
Compiler returned: 0
```

Both GCC and MSVC accept this code. If it's not conforming, should we accept it as an extension?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVU2PozgQ_TXOpZTIsSHAgUOadFZzmNP2rPbWMqYATzs2sk1P-t-vTCDdncnOaqSVIuLP53qvnsvCe9UZxJKkDyQ9rMQYeutK-b2pV7Vt3sqnXnmQtkFoLHpDWBZA2tOgNII1UF2aDh7Pg7YO3Qa-2ldlOgg9QoOtGHXABgbhxAkDOgh2mpLW-OBGGayDeBB4xJOPszWCfRFvG0IPhO7n745efnIYLiMBT4MWAQmvpBbewxPhj5epS98r02kk_OEjzp1drIJL89sNgOxRvjxf41S1RiDZDAcA9xYQlhNWAOGHhftNAOCDCEo-C-_RBcJy5T8jPL8SXk1RTfGw4hYAAH5i8fc1dGidQtPAfQ2yw3_rsSBdQpohPhD_acu7bjG2-UiWf4Nx0vaOSB8ITlJF8OwQuV5hCN_DmbB8_Dx6WXgjxxOcf0FRmQAnocySmo8ZXPSplAkxmHgi_aT59bTFgB-hD0p0xvqgJOG3Rp27vPJ2dBKjRnzPUsL3SfwAOmddbEihdbwvAganXkX4fDVsO6eSsOy-lDF0VsGFAWHZlR1LgWTV_5UQmMBI-niX2DYhfD_xMjZaYw_qNGglVdBv0KDUwsUiMBPs0eEVeZtMyL9_oe5FdS9L1xKlTGv_LVFSC9PBKzqvrIFtsaEb2qkAhOV9CIOP-9iRsGOnQj_WG2lPhB21fl3-1oOz31GGTdyV1jTNM1qkfNc0ec6LnGaMIVJK6zqrc5nVTDZ5fVX4SbgOw2T6fPe8S9ajeTH2h1lrZcbzujPjvK53KBo42QZ1XD1Yr86XqS_GB6E1Ngc1-Yqwox0CYce5Wrs1ziU6jkW66-BG87JmlCWU0y1hx1qZG80chtEZbCIi_YXIDzb08EdVgTANfP3zrwqElDgECMv7sYEvLahAWOajSaLLW-tOynTRer63o27gBy77VADhQRjAc0ATs0L4cdWUvCl4IVZYbjNacEYLSld9iShkiruEtzQrinS3pVmWy6Qt2jbJU5GvVLnQ3BZsm9BNLZhMdyzlnGa02O5IQvEklN7EZG6s61bK-xHLnO9ovtKiRu2nR5IxSdjD9GOEVbEfxSR83zprApomTqSHlSsnX9Rj50lCtfLBv4MHFTSW1eS694fVobSdUR7nMu57NYAyi_XfX1G_Gp0uf8-ZhB0nSp6w48TqnwAAAP__BStgfw">