<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62752>62752</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] lambda in tparam list leads to violation of the ODR
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ericniebler
</td>
</tr>
</table>
<pre>
Consider (with `-std=c++20`):
```c++
template <class T, auto X = []{}>
extern decltype(X) hide_;
template <class T>
using hide = decltype(hide_<T>);
using A = hide<int>;
using B = hide<int>;
static_assert(__is_same_as(A,B));
```
The `static_assert` should not fire, but with clang trunk it does. GCC and MSVC get this case right.
https://godbolt.org/z/janroM4eT
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx8k92KnEoQx5-mvCl20O7xYy68WPV4rpYDJ0vYu6G1a7Q3rT10l5tsnj6oO2QSQkBakN__wypVIZhhJiohrSBtIrXw6HxJ3vSzoc6Sjzqn38vazcFo8gii-Gp4RMjih8AaZNODqEBUIoYsBnEC-QhxA_HtzOL9-sD2p0zT1SomBFn3VoWAzyBqVAs7fEGQDe59IK8gb0D-s8voG5OfUVNv-f1KIIoXECccjaYzyArvg_8UcfNZgpmHTbZl3fl9WNUbu75Mde-56x430UqCrM3MK3rjdqL6C7GfgRWb_qxCIM8givPZhHNQE51VAFE8gqirNf--wm2S9z7PI62r-NUuizGMbrEaZ8d4MZ7W4XYL47a63qp5QPbL_AUNo3YUDvhvXaOaNT59-lzjQIw8moC9CoTeDCMf7lNH5mtYFy1aEO3gdOcsH5wfQLTfQbSvavbu6UjPOx7pUuqTPKmIyiQrjqJIjnkajWWRpbqIjye6FFmSZ2mfU5JSlsdSX6TK88iUIhYyTpNMyDRP04PsBSX6lPVJclRpnsAxpkkZe7D2bVobRCaEhcpM5KmIrOrIhtu37csVeuiWIcAxtiZw-Cljw3b7C7bpQNqgVVOnFZoZ-aq8mnBVoCWlA7LDN-OsYuNmdBfkkfC_5v9o8bb8bTiGx6U79G4C0a5pH7eHq3ev1DOIdmscQLRb6R8BAAD__4HHD-g">