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

    <tr>
        <th>Summary</th>
        <td>
            clang-16 regression in friend functions with concept-constrained template arguments
        </td>
    </tr>

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

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

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

<pre>
    godbolt link: https://godbolt.org/z/j86T8dzMY

In clang 16 (tested in both 16.0.0 via godbolt and 16.0.6 via the standard llvm Ubuntu distro), if you friend a function with a template argument that is concept-constrained:

```
template <typename T> concept some_concept = true;

template <some_concept T>
class Foo

private:
 Foo();
  template <some_concept U> friend Foo<U> Friended(U a);
};

template <some_concept T>
Foo<T> Friended(T a)
  { return {}; }

void Bar()
  { Friended(1); }
```

it fails to compile with a spurious error:
```
<source>:13:12: error: calling a private constructor of class 'Foo<int>'
  { return {}; }
 ^
<source>:16:5: note: in instantiation of function template specialization 'Friended<int>' requested here
  { Friended(1); }
 ^
<source>:7:3: note: declared private here
  Foo();
 ^
```

If the function uses `typename` instead of `some_concept` it compiles fine (the supplied godbolt link has both versions)
This compiles fine in clangs 14 and 15 (as well as gcc and msvc).
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVU1v4zYQ_TX0ZRBDIm1ZOujgxGtgD70UzqGngiLHFrc0qfLDQfLrC1KSo02zQBYwZInkvHnz9ci9VxeD2JLtI9keVjyG3rr2gFzq1z9RPsUOV52Vr-3Fys7qAFqZfwjbQx_C4AnbE3ok9Djtrq27EHp8I_T4o65OtXz74y9SHEixH5_fDQjNzQXKCgitA_qAEpSBzoYeympdrAu4KQ6zN27kuFzl5dAj-MCN5E6C1rcrPHfRhAhS-eAsoQ2hT6DO8GojnJ1CI4HDORoRlDXwokIPHAJeB80DAneXeEUTIPQ8gPIgrBE4hAdhjQ-OK4MyhbiIgFTF9MufdyjCnsLrgIZfEU6EfZuhwNsr_j1_EHaA4CIS9rgEXaL8dD4hjUeE5t7D0drJbvcI49vg1I0HvNPMZ2idUjE7Afilg-dEdUpUMmRPeeWYV1ASWj8DX2KR3eH3yY_Ipw_IpxF5opgichiiM-l1dAPpb-HqZpWER-6m-BaWC9hypLuw_blk41MFOHOlPQQLwl4HpXFuDz9Ep2z0gM5Z917_DzAp2ugEpijZvmTpQdNkzGYguNbKXIDDVCQY-yqKYB3YM4xFJXQ3JkiZkMDo7ms5AbL99jmXirD9NjEwNndGmjBl0uAExfMk2PP7VNwL6AcUimv1Np5JvOa0LsiBw3_jOLg9OvxqFX7JdkfYni3JShSaO5T3rC3dfNLd78CfFfr7OavGPdro0QOpinlaSVXk3CCXKSukKpZNnHfD3CEezspgVq4kRHEYtEIJS2mEnvtRzW7ovLLG3zv11GeFWSKpSQ89lJtR67YJnXt4Qa2Be7gIkTeu_iYIbdYr2TLZsIavsC2reldT1pTFqm-rDeO0K7YVFpt6U9YlbSiX3aapm6YRSFeqpQVlRUUryrY1K9bdbls2513NdmVZbxiSTYFXrvQ6CWtS8pXyPmJbsS2rVpp3qH2-Jyg1-AJ5k1Carg3XJpuHLl482RRa-eDfUYIKGtsc50NZgcOLQ59Sk8KftGcujx-H8BMd_r9q-1V0uv1wD6nQx24t7JXQY2Iw_T0Mzv5AEQg9Zt6e0GOO678AAAD__x4AI3U">