<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">